【Android 命令】android 12 adb 发送广播命令接收不到

简介

项目中注册自定义静态广播,使用adb broadcast 命令发送广播并携带数据给到静态广播。然而发现命令发送后没有被接受到,发送命令如下:

am broadcast -n com.tang.test.intent.action.TEST --ei time 1

排除

  1. 广播注册有问题
  • 通过代码发送成功,可排除注册有问题

Intent intent = new Intent("com.tang.test.intent.action.TEST");
intent.setComponent(new ComponentName("com.tang.test","com.tang.test.MyBroadcastReceiver"));
sendBroadcast(intent);
  1. 命令发送有问题
  • 对比,发现没有问题

猜测

  1. 跟Android版本有关系,高版本做了限制

8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,也就是说广播和服务不能随意收intent了,要对广播和服务更精确的指向,所以在创建intent的时候,我们需要指定我们的广播和服务的包名加类名,为的就是精确。
参考

  1. ComponentName 如何通过命令体现
-n com.xxx.somepackage/com.xxx.packagesclass

解决方案

命令中添加ComponentName 即可

am broadcast -n com.tang.test.intent.action.TEST --ei time 1 -n com.tang.test/com.tang.test.MyBroadcastReceiver

其他

  1. 各字段代码实现
// Action
intent.setAction("com.xxx.action.SOME_ACTION");
// Component
intent.setComponent(new Component("com.xxx.somepackage", "com.xxx.packagesclass"));
// Package
intent.setPackage("com.xxx.someReceivePackage");
// Extra-String
intent.putExtra("extraStringName", "stringValue");
// Extra-Int
intent.putExtra("extraIntName", 1);
// Extra-Boolean
intent.putExtra("extraBoolName", true);
// 权限
 Context.sendBroadcast(someIntent, "SOME_PERMISSION");
...后续再补充
  1. 代码对应的shell指令
// Action
-a com.xxx.action.SOME_ACTION
// Component
-n com.xxx.somepackage/com.xxx.packagesclass
// Package
-p com.xxx.someReceivePackage
// Extra-String 注意String字符中存在的双引号需要做转义 \"
-es extraStringName "stringValue"
// Extra-Int
-ei extraIntName 1
// Extra-Boolean
-ez extraBoolName true
// 权限
 am broadcast --receiver-permission "SOME_PERMISSION"
...后续再补充

参考

接收不到广播的问题
参考

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值