与来自 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)}}
      }

我有两个问题:

  1. 我们可以通过 adb shell 与这些选项交互吗?例如,是否有像 adb shell <SOME COMMAND> 'Message to be sent in whatsapp with reply option' 这样的命令可以在不打开应用程序的情况下在 whatsapp 中发送文本作为回复?

  2. 是否可以使用任何 adb 命令滑动通知? (不是adb shell input swipe x0 y0 x1 y1,每次都需要解锁phone)

提前致谢!

编辑:

以下是我发现的可能与此问题相关的内容。

我认为我必须以某种方式启动链接到提到的 PendingIntent id 的特定意图(在本例中为 6becf4887b8050

使用命令 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),它取决于应用程序并且可能在应用程序文档中

Intent documentation, commands, arguments and options

Whatsapp Android intent system