Android6.0(包括)以后获取Wifi 扫描信息列表即getScanResults()

来源:互联网 发布:编曲软件 知乎 编辑:程序博客网 时间:2024/05/02 02:38

概述:

这篇文章主要解决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信息。


阅读全文
0 0
原创粉丝点击