为什么setWifiEnabled会因CHANGE_NETWORK_STATE权限而抛出SecurityException?

3
在我的一个应用程序中,我正在改变WiFi状态。就像这样:
wifiManager.setWifiEnabled(false);

我在清单文件中拥有以下权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

这段代码在我的手机和大多数其他手机上都可以正常运行。然而,今天我收到了一个崩溃报告,报告中显示以下错误:

Caused by: java.lang.SecurityException: NetworkManagementService: Neither user 10147 nor current process has android.permission.CHANGE_NETWORK_STATE.

堆栈跟踪表明,这个错误是由我改变WiFi状态的行引起的,即 wifiManager.setWifiEnabled(false);

为什么会发生这种情况?为什么它在几乎所有设备上都没有问题,但在这种特定情况下却崩溃了?这是Android版本还是设备相关的问题?我是否真的需要添加 android.permission.CHANGE_NETWORK_STATE 权限才能改变WiFi状态?

1个回答

3
CHANGE_NETWORK_STATE的文档说“允许应用程序更改网络连接状态”,所以我认为,是的,您需要添加权限。在我看来,禁用Wi-Fi很有可能改变网络状态。 至于为什么会在这种特定情况下发生,这可能是因为它在您之前没有测试过的Android版本上运行。

1
我同意,但奇怪的是它在大多数设备上都能完美运行。我认为相同的权限应该在任何设备上给予应用程序相同的访问权限。你知道哪个Android版本需要此权限来更改WiFi状态吗? - Suraj Bajaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接