活动架构Android中的特殊字符

时间:2016-12-03 10:51:09

标签: android android-intent schema sharing

我为我的活动设置了一个intent-filter来打开活动,同时打开一个URL被调用的活动。 URL包含特殊字符,如问号和&符号我无法得到它和android不知道我的应用程序作为此请求的主机。 我使用Unicode和HTML实体仍未解决该问题。

1 个答案:

答案 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