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这个参数是为了寻找当前最合适的适配器,我在网上搜到一些方法:
- Criteria c = new criteria();
- c.setAccuracy(Criteria.Accuracy_FINE); //精度高
- c.setPowerRequirement(Criteria.POWER_LOW); //电量消耗低
- c.setAltitudeRequired(false); //不需要海拔
- c.setSpeedReuquired(false); //不需要速度
- c.setCostAllowed(false); //不需要费用
- 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;
}
@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_COARSE_LOCATION" />
允许程序创建模拟位置提供用于测试
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
最后写一下我在测试的时候遇到的一些问题,在模拟器测试的时候,发送位置的方式可以获取经度纬度 如图
但是在真机上运行(我的手机是魅族MX4),显示不出来位置,我上网了搜了一下,看了一下,应该是我在家里搜不到GPS的,要在空旷的地方,GPS应该可以搜到。