Android DeepLink的简单使用

Deeplink是什么?

Deeplink,简单讲,就是在你手机上点击一个链接后,可以直接链接到app内部的某个页面,而不是app正常打开时显示的首页。累似web,一个链接就可以直接打开web的网页,app的内页打开,可以使用deeplink来实现

基本使用

在清单文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DeepLinkActivity">
<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="appblog"
android:scheme="cn"
/>
</intent-filter>
</activity>

主要代码BROWSABLE意思是可以被外部浏览器打开,host和scheme类似http://xxxx,在跳转的时候会用

1
2
3
4
5
6
7
8
9
<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="appblog"
android:scheme="cn"
/>
</intent-filter>

写一个html链接过去<a href="cn://appblog/20">尝试打开deeplink界面</a>要与上面data里面的字段的对应起来

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>

<a href="cn://appblog/joe">尝试打开deeplink界面</a>
注意:cn就是自己写的scheme,appblog是host可以自定义任意字符串,20是模拟传递的值

</body>
</html>

在MainActivity写一个webview用户加载刚写的网页

1
2
3
4
5
6
7
8
9
10
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获取传递的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class DeepLinkActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable 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(); //cn
String host = uri.getHost(); //appblog
if ("appblog".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之间的跳转

1
2
3
4
5
6
7
8
/**
* deepLink跳转
**/
protected void deepLinkJump(String deepLinkUrl) {
Uri uri = Uri.parse(deepLinkUrl);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}

点击事件中调用:

1
deepLinkJump("cn://chat_activity"); //记得在清单文件添加host和scheme哦!

配置清单如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<activity
android:name=".view.ChatActivity"
android:launchMode="singleTask"
>
<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="chat_activity"
android:scheme="cn"
/>
</intent-filter>
</activity>

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :