Android Oreo 8.0+禁用网络权限问题

sMy*_*les 7 android cordova android-permissions android-8.0-oreo android-8.1-oreo

我正在构建一个Cordova应用程序,该应用程序需要访问Android上的WiFi并禁用当前连接的网络,以防止与它连接的网络自动断开连接(因为没有互联网)。

问题是,在Android Oreo 8.0+上进行测试时,我遇到了此错误adb logcat,但无法弄清楚该如何解决:

E/WifiConfigManager: UID 10315 does not have permission to update configuration "Test SSID"WPA_PSK
E/WifiStateMachine: Failed to disable network
Run Code Online (Sandbox Code Playgroud)

这些是清单中列出的权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

OVERRIDE_WIFI_CONFIG我在这篇文章中找到的烫发,但是在我的特定情况下似乎无济于事:更改Android热点设置

我发现此文件中存在此特定错误:https : //android.googlesource.com/platform/frameworks/opt/net/wifi/+/master/service/java/com/android/server/wifi/WifiConfigManager.java# 984

canModifyNetwork我在这里找到的呼叫:https : //android.googlesource.com/platform/frameworks/opt/net/wifi/+/master/service/java/com/android/server/wifi/WifiConfigManager.java#651

具备Android经验的人可以帮助我解决此问题吗?为了允许我的应用禁用网络,需要做什么?

这是否意味着如果应用不是由应用创建的,则不允许应用禁用网络?请帮助我不知道从这里去哪里!

我也确实找到了该帖子,该帖子引用了6.0,但这是否真的使我们基本上完全摆脱了我们未创建的禁用网络的限制?如果该SSID已经存在另一个WifiConfiguration,则Android 6.0无法添加WifiConfiguration

小智 5

我本身无法回答您的问题,但是我可以回答

这是否意味着如果应用不是由应用创建的,则不允许应用禁用网络?

没错,根据方法disableNetwork 的文档

禁用已配置的网络。指定的网络将不适合关联。这可能会导致状态更改事件的异步传递。不允许应用程序禁用其他应用程序创建的网络。

因此,如果用户已经使用Android系统连接到该网络,则在Oreo中将无法禁用该网络。尽管方法disableNetwork在成功或失败的情况下返回true或false