android手机定位


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


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


然后是MainActivity中的代码

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

LocationManager实例化

LocationManagerlm = (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. Criteriac=newcriteria();
  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. Stringprovider=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应该可以搜到。

更多相关文章

  1. Android蓝牙耳机录音
  2. Android(安卓)中的内容观察者ContentObserver
  3. 酷炫轮播广告
  4. android面试(1)----布局
  5. To fetch EDID from android device
  6. Android,自定义ViewGroup实现titleBar
  7. Android(安卓)6.0 监听系统通知(Notification)
  8. Activity 与 Fragment 通信方式总结
  9. Android——数据存储(四种方式之二)读写SD卡

随机推荐

  1. Android性能调优出发点
  2. [入门四]Android核心模块及相关技术
  3. Android(安卓)调试桥
  4. mac里边配置android开发环境,intellij开发
  5. Android中ScrollView无法正常achartengin
  6. Android(安卓)技巧记录
  7. Android(安卓)最近的一些新的功能
  8. Android(安卓)第五天 (下午)
  9. Android(安卓)Wifi几点
  10. 在ubuntu上编译android的mupdf