android定位服务

android手机定位


随便自己写写,写不得自己看看复习一下。


首先创建一个项目,都是默认的


然后是MainActivity中的代码

然后使用到的类,LocationManager这个类,它提供了一系列的与位置相关的方法,因为我只是初学者,就不那么深的了解

LocationManager实例化

LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

获取实例

                // 注册位置监听服务
// 给位置提供者设置条件
Criteria criteria = new Criteria();
// 设置为最精准
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// 当前哪种方式最好就使用哪种方式
String proveder = lm.getBestProvider(criteria, true);


// gps方式位置改变的情况
// (第1个参数是当前选用哪种定位方式,最好,第二个参数是最少多长时间更新,第3个是最少移动多少米更新,第4个是监听器)
lm.requestLocationUpdates(proveder, 0, 0, listener);


Criteria这个参数是为了寻找当前最合适的适配器,我在网上搜到一些方法:
  1. Criteria c = new criteria();  
  2. c.setAccuracy(Criteria.Accuracy_FINE); //精度高  
  3. c.setPowerRequirement(Criteria.POWER_LOW); //电量消耗低  
  4. c.setAltitudeRequired(false); //不需要海拔  
  5. c.setSpeedReuquired(false); //不需要速度  
  6. c.setCostAllowed(false); //不需要费用  
  7. String provider = locationManager.getBestProvider(criteria, false); //false是指不管当前适配器是否可用  


模拟器上有GPS passive(基站) 这两种方式,真机上还有一个network这个是网络获取方式。

然后是创建一个类实现这个LocationListener接口

private class MyLocationListener implements LocationListener {
/**
* 当位置改变的时候回调
*/
@Override
public void onLocationChanged(Location locatin) {
String longitude = "经度: " + locatin.getLongitude();
String latitude = "纬度: " + locatin.getLatitude();
String accuracy = "精确度: " + locatin.getAccuracy();

TextView textView = new TextView(MainActivity.this);
textView.setText(longitude + "\n" + latitude + "\n" + accuracy);
setContentView(textView);
}


@Override
public void onProviderDisabled(String string) {
//当适配器禁用时调用
}
/**
* 当某一个
*/
@Override
public void onProviderEnabled(String arg0) {
}
/**
* 当状态发生改变的时候回调,状态开启和关闭
*/
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
}

重写onDestroy方法,在这个activity销毁之前,取消监听位置的服务,然后将listener 设置为空

@Override
protected void onDestroy() {
super.onDestroy();
// 取消监听位置服务
lm.removeUpdates(listener);
listener = null;
}
权限不要忘了加
允许一个程序访问精良位置(如GPS)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
允许一个程序访问CellID或WiFi热点来获取粗略的位置
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
允许程序创建模拟位置提供用于测试
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />


最后写一下我在测试的时候遇到的一些问题,在模拟器测试的时候,发送位置的方式可以获取经度纬度 如图


但是在真机上运行(我的手机是魅族MX4),显示不出来位置,我上网了搜了一下,看了一下,应该是我在家里搜不到GPS的,要在空旷的地方,GPS应该可以搜到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值