You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 8/9出现SecurityException:无CHANGE_WIFI_STATE权限求助

问题描述

遇到如下错误:

Fatal Exception: java.lang.SecurityException: InforService: Neither user 10133 nor current process has android.permission.CHANGE_WIFI_STATE.
       at android.os.Parcel.createException(Parcel.java:1950)
       at android.os.Parcel.readException(Parcel.java:1918)
       at android.os.Parcel.readException(Parcel.java:1868)
       at android.net.wifi.InfoManager$Stub$Proxy.addOrUpdateNetwork(InfoManager.java:135)


Caused by android.os.RemoteException: Remote stack trace:
    at android.app.ContextImpl.enforce(ContextImpl.java:1812)
    at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1840)

manifest.xml已配置以下权限:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>

该错误仅发生在Android 8(API 26)和Android 9(API 28)系统上,如何解决?

解决方案

针对Android 8和9的权限与后台机制变化,按以下步骤处理:

  • 清理重复权限声明:manifest.xml中重复声明了CHANGE_WIFI_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.CHANGE_WIFI_MULTICAST_STATE"/>
    
  • 处理后台服务权限限制:Android 8开始对后台服务有严格管控,如果InforService是后台服务,需改为前台服务(添加前台通知),或者确保调用Wi-Fi相关API时App处于前台状态。部分厂商在Android 8/9上会额外限制后台进程的权限生效,即使manifest声明了权限也可能失效。

  • 排查多进程隔离问题:如果App使用多进程,确认调用Wi-Fi API的进程与声明权限的进程一致。若InforService运行在独立进程,可在<service>标签中添加android:permission="android.permission.CHANGE_WIFI_STATE",确保进程权限关联正常。

  • 添加权限检查与引导:部分厂商会将CHANGE_WIFI_STATE纳入可手动关闭的权限列表,可在代码中添加检查逻辑,引导用户开启权限:

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) {
        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri uri = Uri.fromParts("package", getPackageName(), null);
        intent.setData(uri);
        startActivity(intent);
    }
    

内容的提问来源于stack exchange,提问作者Yakubu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:40:12