Android如何通过广播监听Settings.Global.ADB_ENABLED即USB调试状态变更
Android监听USB调试开关变更实现方案
Android系统没有对外发送专门的USB调试(ADB)开关状态变更广播,你可以通过以下两种方案实现响应式感知:
方案1:ContentObserver监听Settings数据库变更(推荐)
所有Settings.Global下的配置项变更都会触发系统数据库的通知,你可以注册内容观察者实现无耗电的实时监听,实现步骤如下:
- 自定义继承自
ContentObserver的子类,重写onChange方法,在方法内执行状态校验逻辑:
// Kotlin示例代码 val adbEnabled = Settings.Global.getInt(contentResolver, Settings.Global.ADB_ENABLED, 0) == 1 // 此处执行你的业务逻辑,比如禁用敏感功能
- 注册观察者到对应的配置Uri:
contentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.ADB_ENABLED), false, yourObserverInstance )
- 在页面/应用销毁时注销观察者,避免内存泄漏:
contentResolver.unregisterContentObserver(yourObserverInstance)
该方案不需要额外申请权限,所有普通应用都可以正常使用,状态变更回调实时性高,基本无额外功耗。
方案2:监听USB连接广播辅助校验
如果你的业务仅需要在USB设备连接时校验USB调试状态,可以监听系统USB状态广播,收到广播后主动查询一次ADB开关状态即可:
- 注册广播接收器,监听action为
android.hardware.usb.action.USB_STATE的系统广播 - 在广播接收器的
onReceive方法中执行ADB开关状态校验逻辑
注意事项
- Android 12及以上版本对后台运行的应用有进程优先级限制,如果你需要在后台长期监听,建议将状态校验逻辑和你应用的其他活跃业务绑定,避免被系统回收
- 不要使用定时轮询的方式查询状态,会产生不必要的额外耗电,影响用户体验
内容的提问来源于stack exchange,提问作者Andranik
相关产品推荐
相关产品推荐

