原文地址:http://blog.csdn.net/qq_33105369/article/details/78431532
概述:
这篇文章主要解决6.0(包括)的系统,动态申请了ACCESS_COARSE_LOCATION 或者 ACCESS_FINE_LOCATION 权限以后,getScanResults().size()还是为0.
1.首先需要了解系统版本>=6.0权限的基本知识。
http://www.jianshu.com/p/a51593817825
2.Android 6.0系统的位置开关
参考 http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/androidmnotice
Android 6.0系统的位置开关
Android 6.0原生系统与部分厂商定制的6.0系统在系统定位开关表现上稍有差异。具体来讲:
系统 | 开关名称 | 对定位的影响 |
---|
原生系统(也包括未进行定制的系统) | 位置信息 | 原生系统下,位置开关控制影响到系统级的GPS及网络定位: 在关闭位置开关情况下,应用无法获取到Wifi信息,也无法使用GPS,仅可使用基站定位(cl类型)*,造成定位误差变大; 打开位置开关后,应用可以使用Wifi信息或GPS进行定位,会大幅提升定位精度 |
第三方、厂商定制系统 | GPS | 厂商定制系统(部分)开关仅影响GPS使用: 关闭GPS开关情况下,应用仍可访问到Wifi信息,可以使用wifi定位 打开GPS开关情况下,应用才可以使用GPS定位 |
1.关于原生系统定位开关会影响Wifi获取的问题,可参照Google Android Bug反馈论坛:
https://code.google.com/p/android/issues/detail?id=185370
这是Android6.0原生系统已知问题,需要Google修复;
厂商定制ROM表现会有所差异。也可参照国内一些开发者文章描述:
http://www.jianshu.com/p/3400ca0deeee.
2.部分早期Android6.0版存在位置开关关闭后无法定位的问题,目前测试最新的Android6.0版本原生系统,已不存在此问题。
针对6.0系统的位置开关问题。由于GPS设置的行为在各版本中一致,因此可以简单的使用系统API来判断用户是否打开了位置按钮,让检测到系统版本为6.0,并且用户未打开按钮时,进行提示。
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
// 未打开位置开关,可能导致定位失败或定位不准,提示用户或做相应处理
}
实测在魅蓝Note3(7.0)系统上开了位置信息后可以获取Wifi信息。