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");
}

Android 地理位置定位相关推荐

  1. Android中WebView控件支持地理位置定位

    Android WebView从assets中加载html5页面,实现地理位置定位,有需要的朋友可以参考下. 今天调研一个html5页面的定位问题,发现在手机浏览器上html5是可以实现定位的,但是在 ...

  2. HTML5 地理位置定位(HTML5 Geolocation)原理及应用 (调用GPS)

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  3. Android 获取定位权限,获取位置信息(国家、地区、经纬)

    第一步 授权 在 AndroidManifest.xml 中加上位置信息权限按需要添加 <uses-permission android:name="android.permissio ...

  4. Android的定位策略

    原文作者:Google 原文地址:https://developer.android.com/guide/topics/location/strategies.html 原文版权:Creative C ...

  5. 浅析Android地理定位(GPS)

    浅析Android地理定位(GPS) 定位权限 介绍一下定位相关的一些API LocationManager 位置提供器 requestLocationUpdates Geocoder Criteri ...

  6. android 定位服务和wifi,android WIFI定位和基站定位实现

    android WIFI定位和基站定位实现 来源:互联网 作者:佚名 时间:2015-04-01 13:38 关于定位原理网上很多,这里就不多说了.下面说怎么实现的,直接贴代码如下:首先是Util类: ...

  7. 功耗大?定位精度差?如何优化Android原生定位

    近期华为开发者论坛收到一位小伙伴提问: 我的应用app需要调用GPS的位置服务,已经将应用所需要的所有权限全部打开,而且使用了wifi和4G网络,手机的耗电管理和联网管理等设置也全部为app开放,但使 ...

  8. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. Android App定位和规避内存泄露方法研究

    from:http://site.douban.com/android/widget/notes/350758/note/167481484/ 工作中刚好用到,网上搜到的,觉得不错,与大家分享 And ...

最新文章

  1. php 去除中英文空格,php去除字符串首尾中英文空格程序_PHP教程
  2. 别瞎学了,这几门语言要被淘汰了!
  3. java 从数据库取值_JAVA操作数据库--从一张表中取值,经过判断,然后插入另一张表中。...
  4. 如何建立一个完整的游戏AI
  5. Web Hacking 101 中文版 六、HTTP 参数污染
  6. Netty工作笔记0043---单Reactor多线程模式
  7. svm图像分割matlab,python实现
  8. Python安装shapely包出现WindowsError: [Error 126]解决方案
  9. Python中str()函数的使用(学习笔记)
  10. FTM的PWM、输入捕获、正交解码
  11. 清华计算机录取通知书,清华送出第一批录取通知书,这些被刷屏的学霸,有怎样的成长密码...
  12. SDNU 1014.书的页码问题
  13. php smtp发送邮件
  14. 数字验证码识别完成自动化登录
  15. 重庆师范计算机录取分数线,重庆师范大学历年录取分数线
  16. 用友OA漏洞学习——test.jsp SQL注入漏洞
  17. 零基础教师成功转型数据分析师,它功不可没
  18. Netty是什么?Netty的优势
  19. AspectJ in Action(2)
  20. 首发!小牛电动股权巨震:李一男、胡依林大幅减持,纪源资本退出

热门文章

  1. python代码编写
  2. Pixel系列还能打,靠的是什么?
  3. java中的定时器的实现样例
  4. 实战演练 Navicat 中英文模式切换
  5. 计算机求职自荐信800字大学,计算机专业大学生求职自荐信
  6. 同济、阿里获CVPR最佳学生论文,李飞飞获黄煦涛奖,近6000人线下参会
  7. ArcGIS API for JS 4.x + Vue 【1】—— 显示地图和添加点线面
  8. UV镜 不镀膜、单层镀膜和多层镀膜 , “暗中”测试 数码相机UV镜效果对比
  9. 浮点数的表示及相关知识详解
  10. PS制作CSS精灵图