我知道如何处理以下网址: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());
}
现在,日志显示为空白。
答案 0 :(得分:1)
好吧,我通过使用以下内容获取完整链接来实现它:
data.getEncodedSchemeSpecificPart();
答案 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);