Android如何通过代码单独检测无线调试功能是否启用?
检测Android无线调试状态的解决方案
已实现的基础检测功能
目前已完成开发者模式与USB调试状态的检测,运行正常的代码如下:
private fun check_My_Android_Mobile_Developer_Mode_Status() { // 检测USB调试状态 val adb: Int = Settings.Secure.getInt(this.contentResolver, Settings.Global.ADB_ENABLED, 0) Toast.makeText(this,"USB调试检测: adb状态:"+adb, Toast.LENGTH_LONG).show() // 检测开发者模式状态 if(Settings.Secure.getInt(this.getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) == 1) { Toast.makeText(this,"开发者模式已启用: 显示提醒", Toast.LENGTH_LONG).show() } else { Toast.makeText(this,"开发者模式未启用: 运行安全模式", Toast.LENGTH_LONG).show() } }
需求:单独检测无线调试状态
需要在开发者模式已开启的前提下,单独判断无线调试模式是否启用。
分版本实现方案
针对不同Android版本,无线调试的检测逻辑存在差异,具体实现代码如下:
private fun checkWirelessAdbStatus() { // 先校验开发者模式是否开启 val isDevModeEnabled = Settings.Secure.getInt(contentResolver, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) == 1 if (!isDevModeEnabled) { Toast.makeText(this, "开发者模式未开启,无线调试无法启用", Toast.LENGTH_LONG).show() return } val isWirelessAdbEnabled: Boolean if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Android 11及以上:读取系统公开设置项 isWirelessAdbEnabled = Settings.Global.getInt(contentResolver, Settings.Global.WIRELESS_ADB_ENABLED, 0) == 1 } else { // Android 10及以下:通过反射读取系统属性判断 val adbTcpPort = getSystemProperty("service.adb.tcp.port") isWirelessAdbEnabled = adbTcpPort != null && adbTcpPort != "-1" } val message = if (isWirelessAdbEnabled) "无线调试已启用" else "无线调试未启用" Toast.makeText(this, message, Toast.LENGTH_LONG).show() } // 反射读取系统属性的辅助方法 private fun getSystemProperty(propertyKey: String): String? { return try { val systemPropClass = Class.forName("android.os.SystemProperties") val getMethod = systemPropClass.getMethod("get", String::class.java) getMethod.invoke(null, propertyKey) as String } catch (e: Exception) { e.printStackTrace() null } }
注意事项
- 权限要求:需要在
AndroidManifest.xml中添加权限:<uses-permission android:name="android.permission.READ_SETTINGS" />;Android 13及以上版本,还需动态申请该权限。 - 版本差异说明:
- Android 11+系统提供了
WIRELESS_ADB_ENABLED公开设置项,可直接读取判断状态。 - Android 10及以下无公开系统设置项,需通过反射读取
service.adb.tcp.port属性:默认USB调试状态下该值为-1,开启无线调试后会被设置为5555或自定义端口,因此值不为-1即可判定无线调试已启用。
- Android 11+系统提供了
内容的提问来源于stack exchange,提问作者harikrishnan
相关产品推荐
相关产品推荐

