繁体   English   中英

旧应用无法在android N上获得WiFi扫描结果

[英]Old app can't get WiFi scan results on android N

我编写了一个可检测wifi网络的应用程序,当我按某个网络时,它会为我提供有关该网络的详细信息。 现在的问题是3年前我写了它,当时Android KitKat不需要用户的弹出权限,而现在当我在android N上运行它并按scan时,它既不扫描也不提供弹出权限。

我已经很久没有编程android了,我也不知道Android应用程序编码要求的变化。 任何想法为什么会发生这种情况?

该应用程序当前使用的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

为了在棉花糖及更高版本上获得WiFi扫描结果, 您的应用将需要请求ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限 ,并且还必须启用“位置模式”设置。

getScanResults()文档中

最近一次扫描中找到的访问点列表。 应用必须拥有ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限才能获得有效结果

做出此更改是因为可以从WiFi扫描结果确定位置。

作为一项额外的安全措施,应用程序现在需要请求“位置”权限才能查看WiFi扫描结果,此外,如果用户将其“位置模式”设置为“关闭”,则在后台运行时没有应用程序可以看到扫描结果。

因此,至少ACCESS_COARSE_LOCATION清单中添加ACCESS_COARSE_LOCATION权限才能获得WiFi扫描结果:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

如果您的目标API版本低于23,则无法在运行时请求权限。 在这种情况下,您的应用将在安装时继续请求所有权限。

如果将应用更新为目标API版本23或更高版本,则需要在运行时请求所有危险权限。 有关在运行时请求“位置”权限的示例,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM