我使用代码A设置WiFi的启用状态,当我在Android Studio 3.1.3中同时使用具有API 26和API 23的Android Emulator时,效果很好,
但是我得到一个提示窗口“一个应用正在请求使用WLAN的许可。允许吗?”当我运行代码A时,在带有Android 5.1的真实手机中运行。
如何使提示窗口不显示在真实手机中?谢谢!
顺便说一句,真正的手机是带有Android 5.1的三星SM-J5008
提示窗口
我已设置权限
<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
}
答案 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地理位置服务的更多信息:
因此,该用户很可能不包含此权限,并且正在获取此对话框。