使用adb 发送广播 动态改变app内的值
前言
在开发过程中有时候我们需要做一些调试工作。可以通过adb发送广播实现。
广播注册
注意最后一个参数,Context.RECEIVER_EXPORTED 这是Android 34以后强制要求的,方便外部发送这个广播。否则会报错
val filter = IntentFilter() filter.addAction(\"com.aaa.bbb.ccc.running.test\") context?.let { mLogger.d(\"registerReceiver is success\") it.applicationContext.registerReceiver(testReceiver, filter, Context.RECEIVER_EXPORTED) }
广播监听器
private var testReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { var appState = intent?.getStringExtra(\"appState\"); mLogger.w(\"接收到状态 appState=\" + appState) if (\"error\".equals(appState)) { recordServiceStared = false; } } }
adb 发射命令
其中 -a 后面是上面的Action。
-es 后面跟的是参数
adb shell am broadcast -a com.aaa.bbb.ccc.running.test --es appState \"error\"
--es
--es key \"value\"
--ez
--ez key true
--ei
--ei key 123
--el
--el key 1234567890
--ef
--ef key 3.14
--eu
--eu key content://media/external/audio/media/1
--ecn
--ecn key com.example.app/.MyReceiver
--eia
--eia key 1 2 3
--ela
--ela key 1000 2000 3000
--efa
--efa key 1.1 2.2 3.3
--esa
--esa key \"a\" \"b\" \"c\"
--esn
--esn key
补充
有时候应用没有退出,这个时候监听器没有生效。需要杀了app,重试
adb shell am force-stop