如何在Android 11+非Root设备上编程检测WiFi调试是否开启
无Root检测WiFi调试开关状态的可行方案
首先确认:Settings.Global.ADB_ENABLED确实仅对应USB调试的开关状态,无法用来判断WiFi调试是否开启,无Root前提下有两种可行的检测方案:
方案1:读取系统全局设置字段(需临时授权)
安卓11及以上官方原生支持WiFi调试功能,其开关状态对应Settings.Global下的adb_wifi_enabled字段,字段值为1表示已开启,0表示未开启。
- 普通应用默认无权限读取该敏感全局设置,需要先引导用户通过adb命令为应用授予读安全设置权限,执行命令如下:
adb shell pm grant 你的应用包名 android.permission.READ_SECURE_SETTINGS
- 权限授予后可以直接通过代码读取状态,示例如下(Java):
int adbWifiStatus = Settings.Global.getInt(getContentResolver(), "adb_wifi_enabled", 0); boolean isWifiAdbEnabled = adbWifiStatus == 1;
方案2:本地端口探测(无需权限)
WiFi调试开启后,系统会在本地端口监听adb连接请求,你可以通过探测本地端口的方式判断开关状态,无需任何特殊权限:
- 安卓11以下第三方ROM实现的WiFi调试默认监听5555端口,安卓11及以上原生WiFi调试默认使用30000~49999段的随机端口
- 你可以遍历对应端口段尝试建立TCP连接,连接超时设为100ms,如果能成功连接任意对应端口即可判定WiFi调试已开启
- 该方案缺点是存在极小概率误判,可能被占用对应端口的其他应用干扰
无法适用的场景
安卓10及以下官方没有原生WiFi调试功能,不同第三方ROM的WiFi调试实现逻辑不统一,没有通用的无Root检测方案。
内容的提问来源于stack exchange,提问作者Artūras Stifanovičius
相关产品推荐
相关产品推荐

