前言

之前我们知道adb发送广播带参数,但是有于Android的权限慢慢收紧,如果不加上接收应用的包名,无法收到发送的静态广播

Android 8.0

Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers.

If your app targets Android 8.0 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that don’t target your app specifically). You can still use a context-registered receiver when the user is actively using your app.

大概意思,静态广播不能到处飞,需要指定接收应用的包名。

正文

由上面得知,我们知道现在发送静态广播,需要指定接收的应用包名。

回归正题,之前我这里摘抄过使用adb shell 发送Broadcast带参数的,这里再摘抄一次。

adb shell am broadcast后面的参数有:

[-a <ACTION>]
[-d <DATA_URI>]
[-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>]
[-f <FLAGS>] [<URI>]

举个例子

# 广播1 不带参数 
adb shell am broadcat -a com.125la.test
# 广播2 带String类型的参数
adb shell am broadcast -a com.125la.test --es test_string "this is test string"
# 广播3 带int类型的参数
adb shell am broadcast -a com.125la.test --ei test_int 100
# 广播4 带boolean类型的参数
adb shell am broadcast -a com.125la.test --ez test_boolean true

PS : -a后面的com.125la.test是ACTION,不是包名。

如果发送静态广播,需要带上接收方的包名。也就在上面基础上最后面加一个包名,比如接收方的包名为:com.biumall.water

# 广播2 带String类型的参数
adb shell am broadcast -a com.125la.test --es test_string "this is test string" com.biumall.water

# 广播3 带int类型的参数
adb shell am broadcast -a com.125la.test --ei test_int 100 com.biumall.water

# 广播4 带boolean类型的参数
adb shell am broadcast -a com.125la.test --ez test_boolean true com.biumall.water

如果不加包名[com.biumall.water],静态注册的BroadcastReceiver是无法接受到上面发送的广播。

参考文章

  1. Android-adb shell am broadcast发广播_cheri–的博客-CSDN博客

  2. adb命令启动service、Activity和发送Broadcast -笔友城堡 – 阅读是一种生活方式 ()

  3. Android 接收不到静态广播(自定义广播)飞鸭传书的博客-CSDN博客android 静态广播

相关文章

暂无评论

none
暂无评论...