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 状态 unsig 的行引起的wifiManager.setWifiEnabled(false);

为什么会这样?为什么它在几乎所有设备上都没有问题,为什么在这种特殊情况下会崩溃?它是Android版本还是设备依赖?我真的需要添加权限android.permission.CHANGE_NETWORK_STATE才能更改 WiFi 状态吗?

4

1 回答 1

3

CHANGE_NETWORK_STATE 的文档说Allows applications to change network connectivity state所以我会说,是的,您确实需要添加权限。在我看来,禁用 wi-fi 很有可能会改变网络状态。

至于为什么会在这种特殊情况下发生,这当然可能是由于它运行在您以前没有测试过的 android 版本上。

于 2012-10-29T16:21:34.077 回答