点击网址打开我的应用时,我注意到了不同的行为。当我这样测试时:
<intent-filter>
<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.asd.com"
android:pathPrefix="/test"
android:scheme="http" />
</intent-filter>
它工作正常并打开应用程序。但是,当我必须把真正的URL:
<intent-filter>
<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.asd.com"
android:pathPrefix="/?goto=login"
android:scheme="http" />
</intent-filter>
它不起作用并打开浏览器!我使用的是三星Galaxy Tab 3和Android 4.4.2
请注意android:pathPrefix
答案 0 :(得分:0)
好吧,就像Selvin在评论中提到的那样,“?goto = logo”不是路径,它是附加到路径末尾的参数。现在,如果那是宁静的,比如“/ login”,那么你的方法就可以了。
但是,因为它不是......一个解决方案是允许应用程序打开您域中的所有网址,然后确定一旦您进入应用程序后如何处理它们。如果可以处理路径(在您的情况下,参数),则在内部重定向它们。如果无法处理路径,请通过仍在维护应用主题的应用内部的WebView重定向它们。
你可以这样做:
<data
android:host="www.asd.com"
android:pathPattern=".*"
android:scheme="http" />
然后,基本上,在你的启动器Activity中,你可以调用getIntent()。getData()来获取你的Activity启动的URI。如果它不为null,则解析params。如果您发现应用程序可以处理的params,那么就这样做。如果没有,您可以将它们重定向到WebView,以免破坏他们的体验。
E.g。要获取没有域名的URL,你可以粗略地解析它:
private String getUrlWithoutDomain(Uri data){
String uri = data.toString();
return uri.substring(uri.indexOf("/", 9) + 1); // 9 because it will start searching for the bounding / after https:// and the first letters of your domain
}
然后,您可以使用以下内容获取您附加到URL的所有参数:
private String[][] getParams(String pathAfterDomain){
String params = pathAfterDomain.substring(pathAfterDomain.indexOf("?"));
String[] unfilteredParams = params.split("&");
String[][] filteredParams = new String[unfilteredParams.length][2];
for(int i = 0; i < filteredParams.length; i++) filteredParams[i] = unfilteredParams[i].split("=");
return filteredParams;
}
这会返回一个包含params列表的多维String数组,其中辅助数组中的第一项是键,第二项是值。
在这种情况下,filteredParams[0][0]
将为“goto”,filteredParams[0][1]
将为“登录”。
然后,您所要做的就是检查是否存在可以处理的params并相应地处理它们。
注意:如果使用上述方法,请确保URI在输入这些方法之前不是null并且实际上包含参数,否则它们将因某些NPE而失败。
希望这有帮助!