Android adb命令发送广播介绍

这篇具有很好参考价值的文章主要介绍了Android adb命令发送广播介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android adb命令发送广播介绍

一、前言

Android 广播除了代码中发送,还可以使用命令模拟发送,只要应用代码中进行了监听,都可以正常接收到的。

掌握手动发送广播命令,可以方便某些代码的调试。

所以学习一下Android adb方式 发送广播命令是有用的。有需要的可以收藏使用。

二、发送广播命令介绍

1、发送广播命令格式

adb shell 发送广播的完整命令格式:

adb shell am broadcast -a <action> [-d ] [-t <mime_type>] [-c <category>] [-n <component>] [-f <flags>] [-e|--es|ei|eb <extra_key> <extra_value>]...

其中, `` 是广播的动作,可以是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 命令介绍

<INTENT> specifications include these flags and arguments:
    [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] [-i <IDENTIFIER>]
    [-c <CATEGORY> [-c <CATEGORY>] ...]
    [-n <COMPONENT_NAME>]
    [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
    [--esn <EXTRA_KEY> ...]
    [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
    [--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
    [--el <EXTRA_KEY> <EXTRA_LONG_VALUE> ...]
    [--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> ...]
    [--ed <EXTRA_KEY> <EXTRA_DOUBLE_VALUE> ...]
    [--eu <EXTRA_KEY> <EXTRA_URI_VALUE> ...]
    [--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>]
    [--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]]
        (multiple extras passed as Integer[])
    [--eial <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]]
        (multiple extras passed as List<Integer>)
    [--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]]
        (multiple extras passed as Long[])
    [--elal <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]]
        (multiple extras passed as List<Long>)
    [--efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]]
        (multiple extras passed as Float[])
    [--efal <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]]
        (multiple extras passed as List<Float>)
    [--eda <EXTRA_KEY> <EXTRA_DOUBLE_VALUE>[,<EXTRA_DOUBLE_VALUE...]]
        (multiple extras passed as Double[])
    [--edal <EXTRA_KEY> <EXTRA_DOUBLE_VALUE>[,<EXTRA_DOUBLE_VALUE...]]
        (multiple extras passed as List<Double>)
    [--esa <EXTRA_KEY> <EXTRA_STRING_VALUE>[,<EXTRA_STRING_VALUE...]]
        (multiple extras passed as String[]; to embed a comma into a string,
         escape it using "\,")
    [--esal <EXTRA_KEY> <EXTRA_STRING_VALUE>[,<EXTRA_STRING_VALUE...]]
        (multiple extras passed as List<String>; to embed a comma into a string,
         escape it using "\,")
    [-f <FLAG>]

参数大致含义根据字面意思理解即可

2、Android 发送广播设置flags的作用

在Android中,广播的标志位(flags)可以用来控制广播的行为和影响接收广播的方式。以下是一些常见的广播标志位及其作用:

- `FLAG_INCLUDE_STOPPED_PACKAGES`:包括已停止的应用程序接收广播。
默认情况下,已停止的应用程序是不会接收到广播的。

- `FLAG_RECEIVER_REGISTERED_ONLY`:只有在代码中注册了对应广播接收器的应用程序才会接收到广播。
如果某个应用程序没有注册对应的接收器,那么它将不会接收到该广播。

- `FLAG_RECEIVER_REPLACE_PENDING`:替换正在等待的广播。
如果有其他相同类型的广播正在等待处理,使用该标志位可以替换掉当前等待的广播。

- `FLAG_RECEIVER_FOREGROUND`:将广播直接发送给运行在前台的应用程序。
这可以用于确保重要的广播消息被前台应用程序及时接收到。这个也是最常用的。

- `FLAG_RECEIVER_NO_ABORT`:即使当前广播接收器中断了广播(例如抛出异常),也继续发送广播给其他接收器。默认情况下,如果一个接收器中断了广播,后续的接收器将不会收到该广播。

这些标志位可以通过在发送广播时使用 -f 参数来设置,例如:

adb shell am broadcast -a com.example.MY_ACTION -f 0x10000000

这个表示前台广播。

请注意,具体的标志位数值可能会因Android版本和设备而有所不同。你可以根据自己的需求选择适当的标志位来控制广播的行为。

广播flag定义的文件和部分数值:

framework\base\core\java\android\content\Intent.java

	public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 0x00000020;
    public static final int FLAG_RECEIVER_REGISTERED_ONLY = 0x40000000;
    public static final int FLAG_RECEIVER_REPLACE_PENDING = 0x20000000;
	public static final int FLAG_RECEIVER_FOREGROUND = 0x10000000; //前台广播
	public static final int FLAG_RECEIVER_NO_ABORT = 0x08000000;

3、Android 蓝牙相关广播介绍

蓝牙开启、关闭、断开、连接等广播,具体可以看:

https://blog.csdn.net/wenzhi20102321/article/details/134956116

4、Android13 不能静态注册的几个广播

Android 所有广播都是可以动态注册,但是部分广播静态注册是无法收到的,具体可以看:

https://blog.csdn.net/wenzhi20102321/article/details/134956090文章来源地址https://www.toymoban.com/news/detail-851819.html

到了这里,关于Android adb命令发送广播介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android发送广播时报错:Sending non-protected broadcast xxxxxxx from system xxxxxxxxxx

    带android:sharedUserId=“android.uid.system” 发送广播时,会出现 Sending non-protected broadcast 异常提醒; 原因: Ams在发送广播时,对于systemApp(系统应用),会要求发送广播必须是声明在frameworksbasecoreresAndroidManifest.xml里面的protected-broadcast。这是为了提醒 系统应用开发者要将 broadca

    2023年04月09日
    浏览(41)
  • Android adb 常用命令

    1.坐标点击:在 100 100位置点击 2.长按:在 100 100 位置长按 1000毫秒 3.滑动:在屏幕上做划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒) 4.截图:   推送设备图片到电脑E盘   删除设备图片 4.1截取副屏(双屏设备)   点击副屏 5.输入字符abc 6.常用命令

    2024年02月11日
    浏览(49)
  • android 通过adb shell命令旋转Android屏幕朝向

    注意: 默认0有的为横向,有的为纵向 纵向返回结果: cur 的值 宽 短 x 高 长 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1794x1731 横向返回结果: cur 的值 宽 长 x 高 短 init=1080x1920 420dpi cur=1920x1080 app=1794x1080 rng=1080x1017-1794x1731

    2024年02月11日
    浏览(106)
  • 【adb命令】Android实用技巧之adb命令:getprop,setprop命令使用

    一、getprop 1.1 getprop简介 getprop命令的作用就是从系统的各种配置文件中读取一些设备的信息。这些文件在我们的手机设备中是可以找到的。 1.2 查询所有的配置 会列出所有的配置信息 这些配置中以ro开头的是只读属性。 1.3 查看单个配置信息 可以在adb shell getprop后面加属性名

    2024年02月04日
    浏览(47)
  • android 通过adb shell命令旋转Android屏幕朝向方向

    注意: 默认0有的为横向,有的为纵向 纵向返回结果: cur 的值 宽 短 x 高 长 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1794x1731 横向返回结果: cur 的值 宽 长 x 高 短 init=1080x1920 420dpi cur=1920x1080 app=1794x1080 rng=1080x1017-1794x1731

    2024年02月06日
    浏览(62)
  • Android adb常用50条命令

    1. adb devices  - 列出所有连接的 Android 设备及模拟器   2. adb shell - 启动 Android 设备或模拟器的 shell 终端  3. adb install - 安装 APK 文件  4. adb uninstall  - 卸载 APK 文件  5. adb logcat - 查看日志输出信息,用于调试应用 6. adb push - 将文件推送到 Android 设备  7. adb pull - 从 Android 设备上

    2024年02月15日
    浏览(41)
  • Android 逆向(四) - adb常用逆向命令

    本篇文章继续记录下adb 的一些常用逆向命令. 该命令可以查看进程信息. 用法: adb shell ps |grep [pname] 过滤进程名称: python 用法 : python 执行adb 命令的代码也很简单,如下: 执行结果: 该命令可以实时查看资源占用情况 用法: adb shell top 列含义: PID(Process ID):进程号 USER:进程所属用户

    2024年03月20日
    浏览(49)
  • Android adb命令logcat日志分析

    logcat 是 android 中的一个命令行工具,可以用于得到程序的log信息。下面介绍 adb logcat 中的详细参数命令以及如何才能高效的打印日志,或者把日志保存到我们指定的位置。 可以输入 adb logcat --help ,查看一下一些简单的数据格式: 输出结果: 选项 描述 举例 -s 输出指定 tag

    2024年04月12日
    浏览(44)
  • Android 通过adb命令查看应用流量

            通过adb shell ps -A  |  grep 包名  来获取app的 pid号         使用 adb shell cat /proc/#pid#/net/dev 命令 来获取流量数据 备注: Recevice: 表示收包 Transmit:  表示发包 bytes: 表示收发的字节数 packets: 表示收发正确的包量 errs: 表示收发错误的包量 drop: 表示收发丢弃的包量 wla

    2024年01月25日
    浏览(47)
  • Android adb shell命令捕获systemtrace

    Android adb shell命令捕获systemtrace   (1)抓取trace文件: -t    时长,20s,20秒的trace文件。 -o   保存文件路径。     (2)把trace文件从手机中pull拉取到电脑桌面:       (3)在谷歌官网: Perfetto UI 打开trace文件:       Android ADB(Andorid Debug Bridge)调试真机设备_adb在线执行器_zhang

    2024年02月09日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包