道理剖析
在Android平台而言,URI重要分三个部份:
scheme,authority,path
个中authority又分为host和port。花样以下:
<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]
对应的manifest中的<data>
设置以下:
<data android:host=""
android:mimeType=""
android:path=""
android:pathPattern=""
android:pathPrefix=""
android:port=""
android:scheme=""
android:ssp=""
android:sspPattern=""
android:sspPrefix=""/>
个中scheme为必需参数,若没有指定,那别的的属性均无效!
假如host没有指定,那末port,path,pathPrefix,pathPattern均无效!
我们最经常运用的是scheme
,host
,port
,path
这四个设置。
完成要领
首先在AndroidManifest
中的MainActivity
中增加一个<intent-filter>
:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="protocol" android:host="domain" android:pathPrefix="/link" />
</intent-filter>
然后在你的网页中增加一个链接:
<a href="protocol://domain/link>翻开app</a>
末了,点击这个a链接,假如app胜利弹出,那末祝贺你,你胜利了。
拓展
光翻开app能够还不够,偶然我们要通报数据,那末怎样去通报数据呢?
我们能够运用上面的要领,把一些数据传给app,那末先修正一下链接:
<a href="protocol://domain/link?id=123>翻开app并通报id</a>
然后在app上的MainActivity中的onCreate要领中增加代码:
Uri uri = getIntent().getData();
String id= uri.getQueryParameter("id");
如许就能够通报数据啦!
假如用的是运用内的webview,猎取数据的操作为:
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Uri uri=Uri.parse(url);
if(uri.getScheme().equals("protocol")&&uri.getHost().equals("domain")){
String id = uri.getQueryParameter("id");
}else{
view.loadUrl(url);
}
return true;
}
});
API
getScheme(); //取得Scheme称号
getDataString(); //取得Uri悉数途径
getHost(); //取得host
附上uri的官方api链接
https://developer.android.com…