(未显示1个用户的1个中间版本) | |||
第26行: | 第26行: | ||
对于Eclipse环境,请更改AndroidManifest.xml中代码;AndroidStudio环境,请更改build.gradle中的代码。 | 对于Eclipse环境,请更改AndroidManifest.xml中代码;AndroidStudio环境,请更改build.gradle中的代码。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<div class="bluetitle"><div class="services-title-text">Android 6.0系统的位置开关</div></div> | <div class="bluetitle"><div class="services-title-text">Android 6.0系统的位置开关</div></div> | ||
Android 6.0原生系统与部分厂商定制的6.0系统在系统定位开关表现上稍有差异。具体来讲,区别如下: | Android 6.0原生系统与部分厂商定制的6.0系统在系统定位开关表现上稍有差异。具体来讲,区别如下: | ||
第95行: | 第40行: | ||
| align="center" | 位置信息 | | align="center" | 位置信息 | ||
− | | | + | | 原生系统下,位置开关控制影响到系统级的卫星定位及网络定位:<br/>a. 在关闭位置开关情况下,应用无法获取到WiFi信息,也无法使用卫星定位,仅可使用基站定位(cl类型),造成定位误差变大;<br/>b. 打开位置开关后,应用可以使用WiFi信息或卫星定位进行定位,会大幅提升定位精度。 |
|- | |- | ||
| | | | ||
第101行: | 第46行: | ||
| align="center" | GPS | | align="center" | GPS | ||
− | | | + | | 厂商定制系统(部分)开关仅影响卫星定位使用:<br/>a. 关闭卫星定位开关情况下,应用仍可访问到WiFi信息,可以使用WiFi定位;<br/>b. 打开卫星定位开关情况下,应用才可以使用卫星定位。 |
|} | |} | ||
第114行: | 第59行: | ||
2. 部分早期Android6.0版存在位置开关关闭后无法定位的问题,目前测试最新的Android6.0版本原生系统,已不存在此问题。 | 2. 部分早期Android6.0版存在位置开关关闭后无法定位的问题,目前测试最新的Android6.0版本原生系统,已不存在此问题。 | ||
− | 针对6. | + | 针对6.0系统的位置开关问题。由于卫星定位设置的行为在各版本中一致,因此可以简单的使用系统API来判断用户是否打开了位置按钮,让检测到系统版本为6.0,并且用户未打开按钮时,进行提示。 |
<pre class="prettyprint codestyle"> | <pre class="prettyprint codestyle"> | ||
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); | LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); |
2022年9月7日 (三) 19:47的最后版本
Google在Android 6.0中引入了动态权限获取机制(Runtime Permission),使得Android的权限管理更加严格完善。
动态权限获取要求开发者在调用涉及相关权限的代码时,使用系统接口来动态得申请相应权限。定位SDK涉及权限即在此范畴中。
在未获取到定位权限情况下,定位SDK获取到的定位依据(基站、WI-FI)均为空值,因此无法有效定位,定位服务会返回错误码167。
Android 6.0对于动态权限机制的开启,主要根据应用所设定的targetSdkVersion,具体情况如下:
targetSdkVersion | 是否默认禁用敏感权限 | 是否开启动态权限 |
<23 | 否 | 否 |
>=23 | 是 | 是 |
因此需要在项目配置文件中修改您的targetSdkVersion配置。
对于Eclipse环境,请更改AndroidManifest.xml中代码;AndroidStudio环境,请更改build.gradle中的代码。
Android 6.0原生系统与部分厂商定制的6.0系统在系统定位开关表现上稍有差异。具体来讲,区别如下:
系统 | 开关名称 | 对定位的影响 |
原生系统 |
位置信息 | 原生系统下,位置开关控制影响到系统级的卫星定位及网络定位: a. 在关闭位置开关情况下,应用无法获取到WiFi信息,也无法使用卫星定位,仅可使用基站定位(cl类型),造成定位误差变大; b. 打开位置开关后,应用可以使用WiFi信息或卫星定位进行定位,会大幅提升定位精度。 |
第三方、厂商定制系统 |
GPS | 厂商定制系统(部分)开关仅影响卫星定位使用: a. 关闭卫星定位开关情况下,应用仍可访问到WiFi信息,可以使用WiFi定位; b. 打开卫星定位开关情况下,应用才可以使用卫星定位。 |
注意:
1. 关于原生系统定位开关会影响WiFi获取的问题,开发者可自行从网络中寻找相关说明。
这是Android6.0原生系统已知问题,需要Google修复;
厂商定制ROM表现会有所差异。(开发者可自行从网络中寻找相关说明)
2. 部分早期Android6.0版存在位置开关关闭后无法定位的问题,目前测试最新的Android6.0版本原生系统,已不存在此问题。
针对6.0系统的位置开关问题。由于卫星定位设置的行为在各版本中一致,因此可以简单的使用系统API来判断用户是否打开了位置按钮,让检测到系统版本为6.0,并且用户未打开按钮时,进行提示。
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ // 未打开位置开关,可能导致定位失败或定位不准,提示用户或做相应处理 }