Android 地理位置定位
来源:互联网 发布:video.js兼容ie8 编辑:程序博客网 时间:2024/05/16 05:12
Android官方提供的定位SDK
1.先在Manifest.xml中申请权限(targetSdkVersion 为23或者更高的需要动态申请权限)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.INTERNET" /> <!-- 使用网络定位作为定位信息提供者时需要访问网络的权限 -->
2.调用Context的getSystemService()方法来获得LocationManager
LocationManager = mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE)
3.获取定位服务提供者LocationProvider
大体上,LocationManager有三种常用方法获得LocationProvider
1.获取所有Provider
List<String> providers = mLocationManager.getProviders(true);
2.根据指定条件来获取最接近的Provider,Criteria是过滤条件。
Criteria criteria=new Criteria();//设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setSpeedRequired(false);//设置是否要求速度criteria.setCostAllowed(false);// 设置是否允许运营商收费 criteria.setBearingRequired(false);//设置是否需要方位信息criteria.setAltitudeRequired(false);//设置是否需要海拔信息criteria.setPowerRequirement(Criteria.POWER_LOW);// 设置对电源的需求String provider = mLocationManager.getBestProvider(crite, true);
3.LocationProvider getProvider(String name); 根据名称来直接获取指定的LocationProvider
String provider = mLocationManager.getProvider(LocationManager.GPS_PROVIDER);
有三种常用的provider是:
1. GPS_PROVIDER:
这个就是手机里有GPS芯片,然后利用该芯片向卫星请求定位当前的地理位置。但是对请求信号强度要求比较高,在室内GPS定位基本没用,百分之就是的可能获取的是null。
2. NETWORK_PROVIDER:
网络定位,通常是利用手机基站和WIFI节点的地址来大致定位位置。这种定位方式取决于将基站或WIFI节点信息翻译成位置信息的服务器的能力。但由于目前发部分Android手机没有安装google官方的location manager库,大陆网络也无法访问到google的服务器,自然该方法基本上没法实现定位。
3. PASSIVE_PROVIDER:
被动定位方式,读取其他应用保存的定位信息。当其它应用使用定位更新定位信息后,系统会被保存下来,被动定位就是读取的这些信息。如果系统中已经安装了百度地图、高德地图之类的应用,你只要使用他们定位过后,使用被动定位就可以拿到比较精确的定位信息了。局限性很大,依赖于别的应用。
4.获取provider提供的位置信息(注意:可能会返回null)
Location location = mLocationManager.getLocation(provider);
LocationManager还有几个常用方法:
Location getLastKnownLocation(String Provider)
根据provider获取最近的一个Location,如果本次定位失败,则返回上次定位成功时的位置信息,如果从未成功过则返回null
void requstLocationUpdates(String Provider,long minTime,long minDistance,LocationListener listener)
//绑定监听,有4个参数 //参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种//参数2,位置信息更新周期,单位毫秒 //参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息 //参数4,监听 //备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新 // 1秒更新一次,或最小位移变化超过1米更新一次;//注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener);
LocationListener 位置监听器
LocationListener locationListener = new LocationListener(){ // 当位置发生变化时触发 public void onLocationChanged(Location location) { Log.i(TAG, "时间:"+location.getTime()); Log.i(TAG, "经度:"+location.getLongitude()); Log.i(TAG, "纬度:"+location.getLatitude()); Log.i(TAG, "海拔:"+location.getAltitude()); } // 当GPS关闭时触发 public void onProviderDisabled(String arg0) { } // 当GPS开启时触发 public void onProviderEnabled(String arg0) { } // 当位置状态改变时触发 public void onStatusChanged(String arg0, int arg1, Bundle arg2) { switch (status) { //GPS状态为可见时 case LocationProvider.AVAILABLE: Log.i(TAG, "当前GPS状态为可见状态"); break; //GPS状态为服务区外时 case LocationProvider.OUT_OF_SERVICE: Log.i(TAG, "当前GPS状态为服务区外状态"); break; //GPS状态为暂停服务时 case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.i(TAG, "当前GPS状态为暂停服务状态"); break; } } };
可以通过一段代码遍历比较三种provider提供的位置信息,并返回精度较高的结果
List<String> providers = mLocationManager.getProviders(true);Location location = null;// 遍历三种定位方式的信息for (String provider : providers) { // 获取定位信息 如果不为空则比较精度 Location l = mLocationManager.getLastKnownLocation(provider); Log.d(TAG,"provider:" + provider + ",location == null:" + (l == null)); if (l == null) { continue; } Log.d(TAG,"provider:" + provider + ",经度:" + l.getLongitude() + ",纬度:" + l.getLatitude()); // 返回精度更高的定位信息 if (location == null || l.getAccuracy() < location.getAccuracy()) { // Found best last known location: %s", l); location = l; }}return location;
LocationManager可以使用isProviderEnabled方法判断是否打开了gps
if(!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ Log.i(TAG, "当前未打开GPS");}
0 0
- android webview 地理位置定位
- Android地理位置定位
- Android 地理位置定位
- 地理位置定位
- Android 实现定位及地理位置解析
- Android APP - GPS定位并获取地理位置
- android webview里HTML5的地理位置定位
- android基站定位程序获取地理位置
- Android中WebView控件支持地理位置定位
- android基站定位程序获取地理位置
- android 高德地图定位(地理位置) 笔记
- android基站定位程序获取地理位置
- android webview里HTML5的地理位置定位
- Android中WebView控件支持地理位置定位
- android 定位 获取地理位置 百度地图
- Android-快速获得当前所在地理位置(简单定位)
- android 腾讯X5webview里HTML5的地理位置定位
- 关于android webview里HTML5的地理位置定位
- 刷题
- PostMan
- CentOS开启coredump转储并生成core文件的配置(centos服务端应用程序开启dump)
- 记录友盟分享,第三方登录遇到的坑
- 虚拟化管理平台的选择:开源软件 or 商业软件?
- Android 地理位置定位
- poj 2251 Dungeon Master
- 牛客在线编程(剑指offer)---二维数组中的查找
- 例题数据库
- ecshop二次开发--优惠活动
- winpcap程序员开发包下载
- GCDAsyncSocket不通过服务器进行客户端间直接连接—iOS移动开发
- 剑指Offer_49_把字符串转换成整数
- 【bzoj1066】[SCOI2007]蜥蜴