我为我的活动设置了一个intent-filter来打开活动,同时打开一个URL被调用的活动。 URL包含特殊字符,如问号和&符号我无法得到它和android不知道我的应用程序作为此请求的主机。 我使用Unicode和HTML实体仍未解决该问题。
答案 0 :(得分:0)
您在www
代码的data
属性中遗漏了host
。它应该是这样的:
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="www.example.com"
android:pathPrefix="/index.php"
android:scheme="http"/>
</intent-filter>
同样不要在pathPrefix
中包含参数,您可以在活动代码中提取它们:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Uri data = getIntent().getData();
if(data != null) {
Log.d(TAG, "onCreate: " + data.toString());
Set<String> names = data.getQueryParameterNames();
for(String name : names) {
Log.d(TAG, "onCreate: param " + name + ": " + data.getQueryParameter(name));
}
}
使用adb进行测试(注意转义为&
):
adb shell am start -W -a android.intent.action.VIEW -d "http://www.example.com/index.php?page=share\&type=album\&id=34" com.example.myapplication
输出是:
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: http://www.example.com/index.php?page=share&type=album&id=34
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: param page: share
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: param type: album
12-03 13:10:41.924 32595-32595/com.example.myapplication D/MainActivity: onCreate: param id: 34