deeplink是什么?
Deeplink,简单讲,就是在你手机上点击一个链接后,可以直接链接到app内部的某个页面,而不是app正常打开时显示的首页。累似web,一个链接就可以直接打开web的网页,app的内页打开,可以使用deeplink来实现
使用
在清单文件配置
主要代码BROWSABLE意思是可以被外部浏览器打开,host和scheme类似http://xxxx,在跳转的时候会用
<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="share"
android:scheme="cc" />
</intent-filter>
写一个html链接过去<a href="cc://share/20">尝试打开deeplink界面</a>
要与上面data里面的字段的对应起来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<a href="cc://share/20">尝试打开deeplink界面</a>
注意:cc就是自己写的scheme,share是host可以自定义任意字符串,20是模拟传递的值
</body>
</html>
在MainActivity写一个webview用户加载刚写的网页
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.web_view);
webView.loadUrl("file:///android_asset/" + "deeplink.html");
}
}
在deeplinkActivity获取传递的值
public class DeepLinkActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deep_link);
TextView tv = findViewById(R.id.tv);
//获得网页传递过来的
Intent intent = getIntent();
if (intent != null) {
Uri uri = intent.getData();
String scheme = uri.getScheme();//cc
String host = uri.getHost();//share
if ("share".equals(host)) {
// 跳转到对应详情页面
Toast.makeText(this, "host:"+host+"scheme:"+scheme+"值:"+uri.getPathSegments(), Toast.LENGTH_SHORT).show();
tv.setText("host:"+host+"\nscheme:"+scheme+"\n值:"+uri.getPathSegments());
}
}
}
}
效果点击后就打开我们写的详情页了,我是写在一个app里的,当然只要是webview就可以打开对应的详情页,两个应用之间的跳转就完成了
封装方法用来activity之间的跳转
/**
* deepLink跳转
**/
protected void deepLinkJump(String deepLinkUrl) {
Uri uri = Uri.parse(deepLinkUrl);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
点击事件中调用
deepLinkJump("cc://chat_activity");//记得在清单文件添加host和scheme哦!
如下图