使用
$ adb shell am start some://url
我可以使用活动管理器启动网址。但是,如果我包含多个URL参数,则除了第一个参数之外的所有参数都会被删除。
示例:
$ adb shell am start http://www.example.com?param1=1¶m2=2
返回:
$ Starting: Intent { act=android.intent.action.VIEW dat=http://www.example.com?param1=1 }
和param2在&符号被忽略之后消失。我想知道&是否有一些编码/转义字符。这将阻止这种情况。
答案 0 :(得分:39)
使用转义字符\
:
$ adb shell am start "http://www.example.com?param1=1\¶m2=2"
答案 1 :(得分: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 ..."
答案 2 :(得分:5)
以下格式似乎有效。请注意引号格式'
"
:
$ adb shell am start -d '"http://www.example.com?param1=1¶m2=2"'
答案 3 :(得分:1)
我已在此处发布了一个解决方法:https://code.google.com/p/android/issues/detail?id=76026
所以,这是涉及仪器的配方 在监听动作com.example.action.VIEW。
的检测中注册BroadcastReceiverIntentFilter 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代理。
答案 4 :(得分:1)
引用am...
命令!
以下内容应该有效(如果不是,请尝试双引号):
adb shell 'am start http://www.example.com?param1=1¶m2=2'