Activity Schema Android中的特殊字符

Posted

技术标签:

【中文标题】Activity Schema Android中的特殊字符【英文标题】:Special Character in Activity Schema Android 【发布时间】:2016-12-03 10:51:09 【问题描述】:

我为我的活动设置了一个意图过滤器来打开活动,同时打开一个 URL 被调用的活动。 URL 包含特殊字符,如问号和 & 符号我无法获取它,并且 android 不知道我的应用程序作为此请求的主机。 我使用 Unicode 和 html 实体来解决该问题仍未解决。

【问题讨论】:

你能举例说明你的 URL 是怎样的吗? http:www.example.com/index.php?page=share&type=album&id=34 为什么http: 后面没有斜杠 (//)?我认为它应该看起来像 http://www.example.com/index.php?page=share&type=album&id=34 您能否提供清单中的意图过滤器以及如何使用此 URL 处理打开意图? 【参考方案1】:

您的data 标记的host 属性中缺少www。它应该是这样的:

<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中包含参数,你可以在Activity代码中提取它们:

@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 测试它(注意转义 &amp;):

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

【讨论】:

我需要管理有参数的链接,所以我不能忽视这一点,最后我用 airbnb/DeepLinkDispatch 库解决了这个问题,但我的问题仍然没有得到解答。谢谢

以上是关于Activity Schema Android中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

Android 中Fragment和Activity之间的通信

WebView的基础用法

android fragment 怎样调用activity中的方法

Android-9-Activity

android开发 如何从一个activity中的两个按钮分别跳转到另外两个activity?

Android 返回堆栈管理打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(代码片