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'"
我正在从 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'"