Android adb命令发送广播介绍
Android adb命令发送广播介绍
文章目录
- Android adb命令发送广播介绍
- 一、前言
- 二、发送广播命令介绍
- 1、发送广播命令格式
- 2、发送广播示例
- (1) 发送开机广播
- (2) 发送自定义广播携带String数据
- (3) 发送自定义广播携带int数据
- (4) 发送自定义广播携带多个数据
- (5) 发送自定义广播设置为前台广播
- 3、Android Java代码介绍广播主要代码
- 三、其他
- 1、adb发送广播的完整格式
- 2、Android 发送广播设置flags的作用
- 3、Android 蓝牙相关广播介绍
- 4、Android13 不能静态注册的几个广播
一、前言
Android 广播除了代码中发送,还可以使用命令模拟发送,只要应用代码中进行了监听,都可以正常接收到的。
掌握手动发送广播命令,可以方便某些代码的调试。
所以学习一下Android adb方式 发送广播命令是有用的。有需要的可以收藏使用。
二、发送广播命令介绍
1、发送广播命令格式
adb shell 发送广播的完整命令格式:
adb shell am broadcast -a [-d ] [-t ] [-c ] [-n ] [-f ] [-e|--es|ei|eb ]...
其中, `` 是广播的动作,可以是Android系统定义的动作,也可以是自定义的动作;`
-d 是数据的URI;-t 是数据的MIME类型;-c 是广播的类别;-n 是广播的组件;-f 是标志位;
–es|ei|ef` 是额外的键值对参数。
其中,-d,-t,-c,-n,-f都是不常用的,只有设置额外数据的 --es,–ei这些是常用的,并且可以设置多个。
es表示 extra_string,ei表示 extra_int,其他的eu,ef以此类推。
以下是一个示例,发送一个最简单的自定义广播:
adb shell am broadcast -a test
这样就可以发送一个自定义动作action为 test 的广播,监听了这个广播的应用就可以收到广播。
自定义的action是可以很随意的,不是一定要设置成 android.intent.XXX或者com.broadcast.XXX
即使一个一两个字母也可以是action,但是一般情况设置的action具有一定含义会避免混乱。
有时候要指定某个应用和某个类来接收的广播,可以用 “-n”,比如:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n package_name/class_name
下面是部分常用广播示例。
2、发送广播示例
(1) 发送开机广播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
开机广播也是可以发送的,并且是没有参数的;
开机完成后,再发送这个广播,监听了开机广播的应用是会再次接收到这个广播的。
但是一般不会手动发这个广播,除了特殊调试使用,因为一般情况意义不大。
除了开机广播,其他的大部分系统广播,比如网络变化广播,时间变化广播等等,都是可以通过命令发送的。
有些广播是携带数据的,数据的携带可以参考下面示例。
(2) 发送自定义广播携带String数据
adb shell am broadcast -a test -es name liwenzhi
(3) 发送自定义广播携带int数据
adb shell am broadcast -a test -ei age 100
(4) 发送自定义广播携带多个数据
adb shell am broadcast -a test -es name liwenzhi --ei age 100 --ef height 180.11
以此类推,多个类型数据用空格隔开就可以了。
(5) 发送自定义广播设置为前台广播
adb shell am broadcast -a test -es name liwenzhi -f 0x10000000
3、Android Java代码介绍广播主要代码
//注册广播 public void registerBroadcast(Context context) { String a = Intent.ACTION_SCREEN_OFF; final IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED); intentFilter.addAction("test"); context.registerReceiver(mMyReceiver, intentFilter); } //反注册广播 public void unRegisterBroadcast(Context context) { context.unregisterReceiver(mMyReceiver); } //广播监听 private final BroadcastReceiver mMyReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action == null) { DebugLog.error("action == null!"); return; } //action打印 DebugLog.info("action = " + action); //数据获取 String name = intent.getStringExtra("name"); DebugLog.info("name = " + name); int age = intent.getIntExtra("age",-1); DebugLog.info("age = " + age); //处理相关action事务 switch (action) { case "test": break; //... } }
三、其他
1、adb发送广播的完整格式
上面介绍的只是一些常用的格式,还有一些复制的格式没有介绍。
如果要看比较完整的命令集,输入命令 “adb shell am” 回车后有很多相关命令的介绍,
拉到最后里面包含了 broadcast 命令介绍
specifications include these flags and arguments: [-a ] [-d ] [-t ] [-i ] [-c [-c ] ...] [-n ] [-e|--es ...] [--esn ...] [--ez ...] [--ei ...] [--el ...] [--ef ...] [--ed ...] [--eu ...] [--ecn ] [--eia [,