从包含问号的网址启动应用

时间:2015-07-14 05:09:35

标签: android url android-intent android-activity

我知道如何处理以下网址:http://example.com/xyz。但是,我的网址包含如下问号:https://example.com/?xyz

因此,当我执行getIntent().getData().getPath()时,我得到的输出为/。问号标记在某种程度上限制了处理。我该如何处理?

以下是intent-filter中的manifest

<intent-filter>
    <action android:name="android.intent.action.VIEW"></action>
    <category android:name="android.intent.category.DEFAULT"></category>
    <category android:name="android.intent.category.BROWSABLE"></category>
    <data android:host="example.com" android:scheme="https"></data>
</intent-filter>

以下是我Activity的代码:

if (getIntent() != null && data != null && data.getPathSegments().size() >= 1) {
    Log.d("tagit", getIntent().getData().getPath().toString());
}

现在,日志显示为空白。

2 个答案:

答案 0 :(得分:1)

好吧,我通过使用以下内容获取完整链接来实现它:

data.getEncodedSchemeSpecificPart();

感谢您的回答:https://stackoverflow.com/a/25295636/3739412

答案 1 :(得分:0)

您必须对网址进行编码才能处理问号/空格/特殊字符。我正在分享一个简单的代码段。它可能对你有帮助。

String urlStr = "http://example.com/?xyz";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

另一个更简单的解决方案可以是:

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);