ADB 以额外的字符串数据开始 activity

ADB starting activity with extra string data

我正在从 ADB 执行以下操作:

PS C:\> adb shell am start -a android.intent.action.MAIN -n boha.notify/.MainActivity -e primaryheader "One Two" -e primarytext "Primary text"
Starting: Intent { act=android.intent.action.MAIN pkg=Two cmp=boha.notify/.MainActivity (has extras) }
Warning: Activity not started, its current task has been brought to the front
PS C:\> 

我的应用程序设置为正确处理新的 Intent 请求,而无需重新启动已经 运行 activity。我已经根据需要覆盖了 onNewIntent()。如下所示:

@Override
protected void onNewIntent(Intent intent)
{
    super.onNewIntent(intent);

    Log.d( "AGENT", "NEW INTENT Extra data = " + intent.getStringExtra("primaryheader"));

    String strPrimaryHeader = intent.getStringExtra("primaryheader");
    String strPrimaryText = intent.getStringExtra("primarytext");
    String strSecondayHeader = intent.getStringExtra("secondaryheader");
    String strSecondaryText = intent.getStringExtra("secondarytext");
}

当我检查 logcat 时,我发现我传递的额外数据字符串没有被正确接收。只有每个字符串的第一个单词是正确的。

见下文:

09-13 18:30:36.583 12248-12248/? D/AGENT: NEW INTENT Extra data = One

为什么 activity 新意图只接收 "One" 而不是 "One Two"?

我没有使用正确的 ADB am 命令参数吗?

使用 --es 进行字符串附加

adb shell am start -a android.intent.action.MAIN -n boha.notify/.MainActivity --es primaryheader "One Two" --es primarytext "Primary text"

我之前已经多次解释过根本原因。这是因为您有多个 sub shell。当外部 shell(在您的情况下为 powershell)解析命令时,它会吃掉 "(即使用它们将命令正确拆分为单独的命令行参数)。但是当命令到达内部 shell(你的 android 设备的 /bin/sh)时,这个信息(你的多字串是一个单一的参数)就丢失了。因此,它会启动 am 命令,每个单词都是一个单独的参数。

最简单的缓解方法是对整个 adb shell 子命令加双引号,并对内部字符串使用单引号:

PS C:\> adb shell "am start -a android.intent.action.MAIN -n boha.notify/.MainActivity -e primaryheader 'One Two' -e primarytext 'Primary text'"