36

使用

$ adb shell am start some://url

我可以使用活动管理器启动 URL。但是,如果我包含多个 URL 参数,除了第一个参数之外的所有参数都会被删除。

例子:

$ adb shell am start http://www.example.com?param1=1&param2=2

回报:

$ Starting: Intent { act=android.intent.action.VIEW dat=http://www.example.com?param1=1 }

和 param2 在&符号被忽略后消失。我想知道 & 是否有一些编码/转义字符会阻止这种情况。

4

5 回答 5

52

使用转义字符\

$ adb shell am start "http://www.example.com?param1=1\&param2=2"
于 2012-11-29T06:24:34.580 回答
17

以下格式似乎有效。注意引号格式' "

$ adb shell am start -d '"http://www.example.com?param1=1&param2=2"'

于 2018-09-26T08:06:42.073 回答
5

由于您可以在此处跟踪的 android 构建工具中的错误,已接受的解决方案不起作用:https ://code.google.com/p/android/issues/detail?id=76026 。解决方法如下:

echo 'am broadcast -a com.android.vending.INSTALL_REFERRER -n <your package>/<broadcast-receiver> --es "referrer" "utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content&utm_campaign=test_name";exit'|adb shell

要将其集成到 gradle 中,您可以使用 commandLine 语句

commandLine "bash","-c","echo ..."
于 2015-04-23T12:53:58.323 回答
1

我已经在这里发布了一个解决方法:https ://code.google.com/p/android/issues/detail?id=76026

所以,这里是涉及仪器的秘诀。
在侦听动作 com.example.action.VIEW 的工具中注册一个 BroadcastReceiver。

IntentFilter intentFilter = new IntentFilter("com.example.action.VIEW");
intentFilter.addDataScheme("myschema");
intentFilter.addCategory(Intent.CATEGORY_BROWSABLE);
Context.registerReceiver(new MyBroadcastReceiver(), intentFilter);

将 & 替换为 %26(使用可以将其替换为您想要的任何内容)并发送意图 com.example.action.VIEW。
收到意图后,BroadcastReceiver 会将 %26 转换回 & 符号,并向您的应用发送具有所需操作的新意图。

public final void onReceive(final Context context, final Intent intent) {
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(intent.getDataString().replaceAll("%26", "&")));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

基本上它充当 BroadcastReceiver 代理。

于 2015-02-20T00:53:12.597 回答
1

引用am...命令!
像下面这样的东西应该可以工作(如果没有,请尝试双引号):

adb shell 'am start http://www.example.com?param1=1&param2=2'
于 2017-01-24T03:10:24.553 回答