前言
之前我们知道adb发送广播带参数,但是有于Android的权限慢慢收紧,如果不加上接收应用的包名,无法收到发送的静态广播。
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是无法接受到上面发送的广播。
参考文章
-
《》
-
《》
-
《》