我一直在和app links一起玩一个测试示例,但它在我的情况下不起作用。
我已经在资源目录中创建了两个html文件 source.html 和 some_html_file.html 。我在一个文件中加载了source.html文件webview并且有按钮,我使用该按钮导航到 some_html_file.html 。查看来源,您将了解我在这里所做的事情。
source.html
<html>
<form name = "type_1" action="some_html_file.html">
<input type="submit" value="Example 1 - open some html file"/>
</form>
<form name = "type_2" action="example2://node/news/23">
<input type="submit" value="Example 2 - go to news 23"/>
</form>
</html>
some_html_file.html
<html>
<head>
<meta property="al:android:url" content="example://node/news/23" />
<meta property="al:android:package" content="com.example.uritest" />
<meta property="al:android:app_name" content="UriTest" />
</head>
<h3>This is uri test page.</h3>
</html>
问题
所以点击第一个按钮,我希望android os应该读取目标html文件的<meta>
标签,并显示我的活动,该活动具有处理意图的逻辑。
的AndroidManifest.xml
<activity android:name=".HandleUriActivity">
<intent-filter>
<data
android:scheme="example"
/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<data
android:scheme="example2"
/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
任何帮助将不胜感激。
从logcat我可以看到 -
D / WebViewCallback:shouldOverrideUrlLoading = file:///android_asset/some_html_file.html? W / WebViewCallback:没有应用程序可以处理file:///android_asset/some_html_file.html?
更新:
我已经更新了我的问题。我刚刚添加了另外一个表单。检查 source.html 中的表单 type_2 。按钮示例2 - 转到新闻23 工作正常,我在 HandleUriActivity 活动中获得以下数据。
host = node
authority = node
path = /news/23
我的问题是如何处理第一种情况,即android os应该在打开包含元数据标记的页面(some_html_file.html)时打开我的活动。
更新#2 :
我同意你@Eric B。但如果我有一个不同的应用程序,它就无法运作。
我的测试网站上有一个包含以下元数据的网页。
<head>
<meta property="al:android:url" content="example://node/news/23" />
<meta property="al:android:package" content="com.example.uritest" />
<meta property="al:android:app_name" content="UriTest" />
</head>
当我在Google Chrome中打开此页面时,Chrome无法显示我的应用。它直接打开网页。
答案 0 :(得分:1)
实施深层链接的动机是,在其他浏览器中点击链接时应打开您的应用。在您的情况下,您的浏览器(WebView)存在于您的应用中,使用深度链接没有意义,您可以使用以下代码打开您的特定活动:
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url){
if(url.equals(YOUR_URL))
{
// Open Activity here
}
webView.loadUrl(url);
return false;
}
});
您可以看到有关深层链接的答案here。
<强>更新强>
像这样更改你的清单:
<activity android:name=".HandleUriActivity">
<intent-filter>
<data android:scheme="http"
android:host="rahulchaurasia3592.github.io" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>