为什么setWifiEnabled为CHANGE_NETWORK_STATE权限抛出SecurityException?

时间:2012-10-29 16:13:43

标签: android permissions android-wifi android-networking android-permissions

在我的某个应用中,我正在更改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 个答案:

答案 0 :(得分:3)

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

至于为什么它发生在这个特定的情况下,它肯定是由于它运行在你以前没有测试过的Android版本上。