旧的应用程序无法在Android N上获得WiFi扫描结果

时间:2017-06-29 22:33:26

标签: java android permissions

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

我已经很长时间没有对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" />

1 个答案:

答案 0 :(得分:2)

要在Marshmallow及更高版本your app will need to request the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission上获取WiFi扫描结果,还必须启用位置模式设置。

来自documentation for getScanResults()

  

最近扫描中找到的访问点列表。应用程序必须   保持ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限   为了获得有效的结果

由于可以根据WiFi扫描结果确定位置,因此进行了此更改。

作为额外的安全措施,应用现在需要请求位置权限才能查看WiFi扫描结果,此外,如果用户将其位置模式设置为关闭,则在后台运行时,任何应用都无法看到扫描结果。 / p>

因此,至少应将 if User.current() == nil { let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let navigationControllerr:UINavigationController = storyboard.instantiateInitialViewController() as! UINavigationController let initialViewController = storyboard.instantiateViewController(withIdentifier: "SplashPageVC") navigationControllerr.viewControllers = [initialViewController] self.window?.rootViewController = navigationControllerr } 权限添加到您的清单中,以获得WiFi扫描结果:

ACCESS_COARSE_LOCATION

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

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