Android 10:如何检测用户对CHANGE_WIFI_STATE权限通知的操作
Android 10下检测
addNetworkSuggestions权限通知的用户操作问题 问题背景
我在Android 10上使用addNetworkSuggestions接口实现自动连接已有WiFi热点,核心实现代码如下:
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager; val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // 错误处理逻辑 } // 可选:监听连接后的广播 val intentFilter = IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { return; } // 连接后的处理逻辑 } }; context.registerReceiver(broadcastReceiver, intentFilter);
在Android 10设备上,调用该接口后系统会弹出通知询问用户是否允许权限:
根据官方文档描述,这是Android 10的正常行为:
在Android 11(API级别30)及更高版本中,应用在前台运行时用户会看到对话框,后台运行时会看到通知。
在Android 10(API级别29)中,无论应用在前台还是后台运行,用户都会看到通知。
我的需求是:用户未接受权限时显示引导文本,已接受则隐藏该文本,但目前无法检测用户对系统权限通知的接受/拒绝操作。
已尝试的方法及结果
- 检查
wifiManager.addNetworkSuggestions返回结果:即便用户未接受权限,该方法仍返回STATUS_NETWORK_SUGGESTIONS_SUCCESS,无法触发错误处理逻辑val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // 用户未接受权限时,此代码块不会触发 } - 使用
ActivityCompat.checkSelfPermission:该方法始终返回true,无法判断权限状态ActivityCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE) - 使用
AppOpsManager.unsafeCheckOp:用户未操作通知时返回true,仅在用户拒绝权限时返回false,无法检测用户接受权限的状态appOpsManager.unsafeCheckOp("android:change_wifi_state", Process.myUid(), applicationContext.packageName) == AppOpsManager.MODE_ALLOWED - 使用
requestPermissions请求Manifest.permission.CHANGE_WIFI_STATE:虽能收到PackageManager.PERMISSION_GRANTED的回调,但调用后仍会弹出系统权限通知,无法解决问题
已声明的权限
Manifest文件中已添加以下权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
内容的提问来源于stack exchange,提问作者Bertrand Martel
相关产品推荐
相关产品推荐

