android 6.0 关于定位的那些坑
今天我们的客户反应一台android设备获取不到定位,我立刻乘车到客户公司调查,原因是android系统的定位服务被关闭了。
针对此事件,我查阅了谷歌文档。定位服务,是android 6.0及以上系统才有功能。
定位服务简介:通常将各种不同的定位技术称为位置服务或定位服务。这种服务是通过电信运营商的无线电通信网络(如GSM网、CSMA网等)或外部定位方式(如GPS)来实现的。Android提供了对移动数据(cell tower,也叫蜂窝发射塔)、无线网络(Wi-fi)、全球定位系统(GPS)等多种定位技术的访问。
例如,你编写的应用程序希望使用GPS定位,但是手机的位置服务可能处于关闭状态,这种情况下,实际上是无法获取到位置的,连一个粗略的位置都没有。该提供程序返回null,如果是百度定位sdk,返回就是167,无定位权限访问。就是我遇到的这种问题。
位置服务,需要授予两个权限才能访问,官方描述如下:
ACCESS_COARSE_LOCATION
String ACCESS_COARSE_LOCATION
Allows an app to access approximate location. Alternatively, you might want ACCESS_FINE_LOCATION
.
Protection level: dangerous
Constant Value: "android.permission.ACCESS_COARSE_LOCATION"
ACCESS_FINE_LOCATION
String ACCESS_FINE_LOCATION
Allows an app to access precise location. Alternatively, you might want ACCESS_COARSE_LOCATION
.
Protection level: dangerous
Constant Value: "android.permission.ACCESS_FINE_LOCATION"
ACCESS_LOCATION_EXTRA_COMMANDS
String ACCESS_LOCATION_EXTRA_COMMANDS
Allows an application to access extra location provider commands.
Protection level: normal
Constant Value: "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
看懂英文的就知道为什么是3个权限了哈。
其次,我们的应用如何检查定位服务是否打开?谷歌也说了,定位服务是一种特殊类型的由Android系统管理的服务。系统服务总是与设备的硬件进行交互,并总是处于运行状态。在应用程序中,可利用ILocationListener与LocationManager类来访问定位服务。具体来说,要利用Android
Location Service获取用户的位置,需要完成下面的步骤:
- 获取对LocationManager类的引用。
- 使用LocationManager请求提供程序更新位置
- 当位置发生改变时,在实现的ILocationListener接口中处理位置信息。
- 当应用程序转入后台时停止位置更新。
所以,我们需要使用LocationManager来判断是否开启位置服务。
如果没有开始位置服务,我们可以跳转到开启位置服务的页面,代码如下:
Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(locationIntent);
上一篇: python测试程序1
下一篇: Python 使用全局变量
推荐阅读
-
关于Android Studio封装SDK的那些事儿
-
关于Android 6.0权限的动态适配详解
-
详解关于Android Studio中安装和gradle的一些坑
-
Android关于WebView中无法定位的问题解决
-
关于ADB的Android Debug Bridge(安卓调试桥)那些事
-
关于vue-router 中参数传递的那些坑(params,query)
-
关于Android 6.0权限的动态适配详解
-
解决Android原生定位的坑
-
uniapp踩坑(四):android中引入高德地图,实时定位(精度)遇到的问题及解决方法
-
关于ADB的Android Debug Bridge(安卓调试桥)那些事