8

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

我在这篇文章中找到的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

4

1 回答 1

5

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

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

这是正确的,根据方法 disableNetwork的文档:

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

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

于 2018-02-01T16:18:45.387 回答