通过gps取得的是一个location类型的经纬度, 可以转换为两个double 纬度和经度.
纬度: 23.223871812820435
纬度: 113.58986039161628
首先创建一个textview和两个button
<textview
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<button
android:id="@+id/btnstart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="定位" />
<button
android:id="@+id/btnstop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止" />
然后添加主activity的代码
location 是存放经纬度的一个类型
locationmanager是位置管理服务类型
private button btnstart;
private button btnstop;
private textview textview;
private location mlocation;
private locationmanager mlocationmanager;
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate)
{
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
btnstart = (button)findviewbyid(r.id.btnstart);
btnstop = (button)findviewbyid(r.id.btnstop);
textview = (textview)findviewbyid(r.id.text);
btnstart.setonclicklistener(btnclicklistener); //开始定位
btnstop.setonclicklistener(btnclicklistener); //结束定位按钮
}
gpsisopen是自己写的查看当前gps是否开启
getlocation 是自己写的一个获取定位信息的方法
mlocationmanager.removeupdates()是停止当前的gps位置监听
public button.onclicklistener btnclicklistener = new button.onclicklistener()
{
public void onclick(view v)
{
button btn = (button)v;
if(btn.getid() == r.id.btnstart)
{
if(!gpsisopen())
return;
mlocation = getlocation();
if(mlocation != null)
textview.settext("维度:" + mlocation.getlatitude() + "\n经度:" + mlocation.getlongitude());
else
textview.settext("获取不到数据");
}
else if(btn.getid() == r.id.btnstop)
{
mlocationmanager.removeupdates(locationlistener);
}
}
};
private boolean gpsisopen()
{
boolean bret = true;
locationmanager alm = (locationmanager)this.getsystemservice(context.location_service);
if(!alm.isproviderenabled(locationmanager.gps_provider))
{
toast.maketext(this, "未开启gps", toast.length_short).show();
bret = false;
}
else
{
toast.maketext(this, "gps已开启", toast.length_short).show();
}
return bret;
}
判断当前是否开启gps
private boolean gpsisopen()
{
boolean bret = true;
locationmanager alm = (locationmanager)this.getsystemservice(context.location_service);
if(!alm.isproviderenabled(locationmanager.gps_provider))
{
toast.maketext(this, "未开启gps", toast.length_short).show();
bret = false;
}
else
{
toast.maketext(this, "gps已开启", toast.length_short).show();
}
return bret;
}
该方法获取当前的经纬度, 第一次获取总是null
后面从locationlistener获取已改变的位置
mlocationmanager.requestlocationupdates()是开启一个locationlistener等待位置变化
private location getlocation()
{
//获取位置管理服务
mlocationmanager = (locationmanager)this.getsystemservice(context.location_service);
//查找服务信息
criteria criteria = new criteria();
criteria.setaccuracy(criteria.accuracy_fine); //定位精度: 最高
criteria.setaltituderequired(false); //海拔信息:不需要
criteria.setbearingrequired(false); //方位信息: 不需要
criteria.setcostallowed(true); //是否允许付费
criteria.setpowerrequirement(criteria.power_low); //耗电量: 低功耗
string provider = mlocationmanager.getbestprovider(criteria, true); //获取gps信息
location location = mlocationmanager.getlastknownlocation(provider);
mlocationmanager.requestlocationupdates(provider, 2000, 5, locationlistener);
return location;
}
改方法是等待gps位置改变后得到新的经纬度
private final locationlistener locationlistener = new locationlistener()
{
public void onlocationchanged(location location)
{
// todo auto-generated method stub
if(location != null)
textview.settext("维度:" + location.getlatitude() + "\n经度:"
+ location.getlongitude());
else
textview.settext("获取不到数据" + integer.tostring(ncount));
}
public void onproviderdisabled(string provider)
{
// todo auto-generated method stub
}
public void onproviderenabled(string provider)
{
// todo auto-generated method stub
}
public void onstatuschanged(string provider, int status, bundle extras)
{
// todo auto-generated method stub
}
};
更多android实现gps定位代码实例。