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

Android Oreo 8.0+ Disable Network Permissions Problems

我正在构建一个 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

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

<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" />

我在 post 上找到的 OVERRIDE_WIFI_CONFIG 烫发,但这似乎对我的具体情况没有帮助:Changing Android hotspot settings

我发现这个特定的错误位于这个文件中: https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/master/service/java/com/android/server/wifi/WifiConfigManager.java#984

这调用了我在这里找到的 canModifyNetworkhttps://android.googlesource.com/platform/frameworks/opt/net/wifi/+/master/service/java/com/android/server/wifi/WifiConfigManager.java#651

有没有比 Android 更有经验的人可以帮我解决这个问题,需要做什么才能让我的应用程序禁用网络?

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

我也确实找到了这个 post,它引用了 6.0,但是我们基本上完全被禁止禁用我们没有创建的网络是真的吗?

我本身无法回答你的问题,但我可以回答这个问题

Does this mean that apps are not allowed to disable a network if it wasn't created by the app?

正确,根据 disableNetwork 方法的 documentation:

Disable a configured network. The specified network will not be a candidate for associating. This may result in the asynchronous delivery of state change events. Applications are not allowed to disable networks created by other applications.

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