【问题标题】:Why is setWifiEnabled throwing SecurityException for CHANGE_NETWORK_STATE permission?为什么 setWifiEnabled 会为 CHANGE_NETWORK_STATE 权限抛出 SecurityException?
【发布时间】:2012-10-29 16:13:42
【问题描述】:

在我的一个应用程序中,我正在更改 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 状态吗?

【问题讨论】:

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


    【解决方案1】:

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

    至于为什么会在这种特殊情况下发生,这肯定是因为它运行在您之前没有测试过的 android 版本上。

    【讨论】:

    • 我同意,但奇怪的是它适用于大多数设备。我认为相同的权限应该为任何设备上的应用程序提供相同的访问权限。知道哪个 Android 版本需要此权限来更改 WiFi 状态吗?
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2021-03-05
    • 2021-03-19
    • 2023-03-14
    • 2021-12-03
    • 2012-03-09
    相关资源
    最近更新 更多