> 技术文档 > 使用adb 发送广播 动态改变app内的值

使用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 String 添加一个字符串(String)类型的 Extra --es key \"value\" --ez Boolean 添加一个布尔值(true/false) --ez key true --ei Integer 添加一个整数(int) --ei key 123 --el Long 添加一个长整型(long) --el key 1234567890 --ef Float 添加一个浮点数(float) --ef key 3.14 --eu URI 添加一个 URI 类型 --eu key content://media/external/audio/media/1 --ecn ComponentName 添加一个组件名(用于指定接收器) --ecn key com.example.app/.MyReceiver --eia int[] Array 添加整型数组 --eia key 1 2 3 --ela long[] Array 添加长整型数组 --ela key 1000 2000 3000 --efa float[] Array 添加浮点数组 --efa key 1.1 2.2 3.3 --esa String[] Array 添加字符串数组 --esa key \"a\" \"b\" \"c\" --esn null 添加一个 null 值 --esn key

补充

有时候应用没有退出,这个时候监听器没有生效。需要杀了app,重试

adb shell am force-stop