为什么我得到“请求使用WLAN的许可。允许?”真实手机的提示窗口?

时间:2018-06-25 13:31:42

标签: android kotlin

我使用代码A设置WiFi的启用状态,当我在Android Studio 3.1.3中同时使用具有API 26和API 23的Android Emulator时,效果很好,

但是我得到一个提示窗口“一个应用正在请求使用WLAN的许可。允许吗?”当我运行代码A时,在带有Android 5.1的真实手机中运行。

如何使提示窗口不显示在真实手机中?谢谢!

顺便说一句,真正的手机是带有Android 5.1的三星SM-J5008

提示窗口

enter image description here

我已设置权限

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

代码A

fun setWiFi(aWiFiDef: WiFiDef): Unit{
    val wifiManager =mContext.applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
    wifiManager.isWifiEnabled=aWiFiDef.status        
}

2 个答案:

答案 0 :(得分:2)

Android 5.1没有这样的运行时权限,因此我认为这是一个错误实现的权限请求,即使应用程序不需要该权限请求也会显示出来。您写的是使用API​​级别26和23(Android 6.0或更高版本)进行测试的,因此这些版本已经具有运行时权限。也许您没有看到此问题,因为您尚未在Android 6.0以下的设备上进行测试...

请检查您是否在某处调用AppCompat.shouldShowRequestPermissionRationale(),并且是否被SDK级别检查所包围,或者至少用checkSelfPermission包围,如此处所述:https://developer.android.com/training/permissions/requesting。在装有Android 5.1和Android 6.0的模拟器中测试您的代码。然后,您应该也可以在真实电话上重现该问题。

答案 1 :(得分:0)

您还需要将其添加到清单中:

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

根据以下网站:*App on Marshmallow needs ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission and Location services should be enabled to get wifi scan results。 Google可能会将扫描wifi视为安全问题,并希望添加位置权限。

如果您在将ACCESS_COARSE_LOCATION权限添加到清单后后遇到困难,我建议关注下面的博客文章。

https://www.intentfilter.com/2016/08/programatically-connecting-to-wifi.html

编辑

对于不赞成投票的人,请附上解释原因的评论。我的答案是完全错误的吗?我忽略了什么吗?

有关Google地理位置服务的更多信息:

  • Google为其地理位置服务维护着一个庞大的数据库(“访问粗略位置”权限)。它包括:
    • Wifi接入点映射:Wifi MAC地址解析为地理位置
    • 蜂窝塔映射:蜂窝塔ID解析为地理位置

因此,该用户很可能不包含此权限,并且正在获取此对话框。