与来自 ADB Shell 的 android 通知操作互动
Interact with android notification action from ADB Shell
我有一台 Android(7) phone 和一台 Linux 电脑。通过启用 USB 调试并使用我电脑的终端,我可以使用以下命令读取 phone 的通知:
adb shell dumpsys notification --noredact
现在,android 中有一些通知,我们可以直接从通知中与应用程序进行交互。例如,在 Whatsapp 通知中,通常有两个按钮:回复 & 标记为已读。在 YouTube 中,有播放、关闭、稍后观看等选项。在上述命令的输出中,这些选项以以下形式显示:
actions={
[0] "Reply" -> PendingIntent{6becf48: PendingIntentRecord{87b8050 com.whatsapp startService (whitelist: +30s0ms)}}
[1] "Mark as read" -> PendingIntent{c1661e1: PendingIntentRecord{b8e3249 com.whatsapp startService (whitelist: +30s0ms)}}
}
我有两个问题:
我们可以通过 adb shell 与这些选项交互吗?例如,是否有像 adb shell <SOME COMMAND> 'Message to be sent in whatsapp with reply option'
这样的命令可以在不打开应用程序的情况下在 whatsapp 中发送文本作为回复?
是否可以使用任何 adb 命令滑动通知? (不是adb shell input swipe x0 y0 x1 y1
,每次都需要解锁phone)
提前致谢!
编辑:
以下是我发现的可能与此问题相关的内容。
我认为我必须以某种方式启动链接到提到的 PendingIntent id 的特定意图(在本例中为 6becf48
或 87b8050
)
使用命令 adb shell dumpsys activity intents > output.txt
然后在 output.txt
中搜索 87b8050
,我找到了意图的名称。内容如下:
* PendingIntentRecord{87b8050 com.whatsapp startService (whitelist: +30s0ms)}
uid=10104 packageName=com.whatsapp type=startService flags=0x0
requestIntent=act=com.whatsapp.intent.action.DIRECT_REPLY_FROM_MESSAGE dat=content://com.whatsapp.provider.contact/contacts/2256 cmp=com.whatsapp/.notification.DirectReplyService (has extras)
whitelistDuration=+30s0ms
现在我认为可以使用 adb shell am
命令启动意图 com.whatsapp.intent.action.DIRECT_REPLY_FROM_MESSAGE
,并将意图 ID 和消息作为一些参数传递。
(就像我们可以使用 am
命令从 adb 启动 Whatsapp 一样,应该也可以启动 pendingIntent。)
无法从非根 ADB 访问未导出的组件。
理论上你可以运行这段代码来执行“回复”动作:
adb shell am startservice --user 10104 \
-a "com.whatsapp.intent.action.DIRECT_REPLY_FROM_MESSAGE" \
-d "content://com.whatsapp.provider.contact/contacts/2256" \
-n "com.whatsapp/.notification.DirectReplyService" \
--es extra_key extra_string_value
com.whatsapp
--user
- 用户 uid,
-a
- 来自 requestIntent.act
的操作
-d
- data_uri 来自 requestIntent.dat
-n
- 来自 requestIntent.cmp
的组件
--es EXTRA_KEY extra_string_value
- 额外的 keys/values,应用程序应该接受。它是可选的,并在应用程序中定义,实际上此操作接受额外的键,请参阅 (has extras)
,它取决于应用程序并且可能在应用程序文档中
我有一台 Android(7) phone 和一台 Linux 电脑。通过启用 USB 调试并使用我电脑的终端,我可以使用以下命令读取 phone 的通知:
adb shell dumpsys notification --noredact
现在,android 中有一些通知,我们可以直接从通知中与应用程序进行交互。例如,在 Whatsapp 通知中,通常有两个按钮:回复 & 标记为已读。在 YouTube 中,有播放、关闭、稍后观看等选项。在上述命令的输出中,这些选项以以下形式显示:
actions={
[0] "Reply" -> PendingIntent{6becf48: PendingIntentRecord{87b8050 com.whatsapp startService (whitelist: +30s0ms)}}
[1] "Mark as read" -> PendingIntent{c1661e1: PendingIntentRecord{b8e3249 com.whatsapp startService (whitelist: +30s0ms)}}
}
我有两个问题:
我们可以通过 adb shell 与这些选项交互吗?例如,是否有像
adb shell <SOME COMMAND> 'Message to be sent in whatsapp with reply option'
这样的命令可以在不打开应用程序的情况下在 whatsapp 中发送文本作为回复?是否可以使用任何 adb 命令滑动通知? (不是
adb shell input swipe x0 y0 x1 y1
,每次都需要解锁phone)
提前致谢!
编辑:
以下是我发现的可能与此问题相关的内容。
我认为我必须以某种方式启动链接到提到的 PendingIntent id 的特定意图(在本例中为 6becf48
或 87b8050
)
使用命令 adb shell dumpsys activity intents > output.txt
然后在 output.txt
中搜索 87b8050
,我找到了意图的名称。内容如下:
* PendingIntentRecord{87b8050 com.whatsapp startService (whitelist: +30s0ms)}
uid=10104 packageName=com.whatsapp type=startService flags=0x0
requestIntent=act=com.whatsapp.intent.action.DIRECT_REPLY_FROM_MESSAGE dat=content://com.whatsapp.provider.contact/contacts/2256 cmp=com.whatsapp/.notification.DirectReplyService (has extras)
whitelistDuration=+30s0ms
现在我认为可以使用 adb shell am
命令启动意图 com.whatsapp.intent.action.DIRECT_REPLY_FROM_MESSAGE
,并将意图 ID 和消息作为一些参数传递。
(就像我们可以使用 am
命令从 adb 启动 Whatsapp 一样,应该也可以启动 pendingIntent。)
无法从非根 ADB 访问未导出的组件。
理论上你可以运行这段代码来执行“回复”动作:
adb shell am startservice --user 10104 \
-a "com.whatsapp.intent.action.DIRECT_REPLY_FROM_MESSAGE" \
-d "content://com.whatsapp.provider.contact/contacts/2256" \
-n "com.whatsapp/.notification.DirectReplyService" \
--es extra_key extra_string_value
com.whatsapp
--user
- 用户 uid,
-a
- 来自 requestIntent.act
的操作
-d
- data_uri 来自 requestIntent.dat
-n
- 来自 requestIntent.cmp
的组件
--es EXTRA_KEY extra_string_value
- 额外的 keys/values,应用程序应该接受。它是可选的,并在应用程序中定义,实际上此操作接受额外的键,请参阅 (has extras)
,它取决于应用程序并且可能在应用程序文档中