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

如何检测WiFi调试模式的开启与关闭状态及实时变更?

检测WiFi调试状态的实现方案

一、应用启动时主动检测状态

WiFi调试的开关状态存储在系统全局设置中,可直接读取该值判断状态。注意需要申请READ_SETTINGS权限(系统特殊权限,需引导用户手动授权)。

代码示例:

private static final int REQUEST_CODE_AUTH_SETTINGS = 1001;

// 检测WiFi调试状态
private void checkAdbWifiState() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
        // 引导用户前往设置页授权
        Intent authIntent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
        authIntent.setData(Uri.parse("package:" + getPackageName()));
        startActivityForResult(authIntent, REQUEST_CODE_AUTH_SETTINGS);
        return;
    }

    // 读取状态:1为开启,0为关闭
    int state = Settings.Global.getInt(getContentResolver(), Settings.Global.ADB_WIFI_ENABLED, 0);
    boolean isWifiDebugEnabled = state == 1;
    // 此处处理状态结果,比如更新UI或业务逻辑
}

// 处理授权返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_AUTH_SETTINGS) {
        checkAdbWifiState();
    }
}

二、监听WiFi调试状态变化

系统在WiFi调试状态变更时会发送Settings.Global.ACTION_ADB_WIFI_ENABLED_CHANGED广播,通过动态注册广播接收器可实时获取状态变化。

代码示例:

1. 定义广播接收器

public class AdbWifiStateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Settings.Global.ACTION_ADB_WIFI_ENABLED_CHANGED.equals(intent.getAction())) {
            // 读取最新状态
            int state = Settings.Global.getInt(context.getContentResolver(), Settings.Global.ADB_WIFI_ENABLED, 0);
            boolean isEnabled = state == 1;
            // 处理状态变更逻辑
        }
    }
}

2. 动态注册接收器(建议在Activity/Service的onCreate中注册)

private AdbWifiStateReceiver wifiStateReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...其他初始化逻辑

    wifiStateReceiver = new AdbWifiStateReceiver();
    IntentFilter filter = new IntentFilter(Settings.Global.ACTION_ADB_WIFI_ENABLED_CHANGED);
    registerReceiver(wifiStateReceiver, filter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    // 注销接收器,避免内存泄漏
    if (wifiStateReceiver != null) {
        unregisterReceiver(wifiStateReceiver);
    }
}

注意事项

  • API兼容:Settings.Global.ADB_WIFI_ENABLED从Android 11(API 30)开始正式对外开放,若需兼容更早版本,可直接使用字符串常量"adb_wifi_enabled"替代系统常量进行读取。
  • 权限限制:READ_SETTINGS权限无法通过常规权限弹窗申请,必须引导用户到应用设置页手动开启权限。
  • 广播注册:由于Android 8.0(API 26)后静态注册广播接收器受限,建议使用动态注册方式确保能接收到状态变更广播。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:55:38