首先需要明确一点基础概念
在 AndroidManifest.xml 中对被启动的 Activity 进行配置
接着写出 Html 文件 Just.xml
启动 APP无法启动
启动 APP1
启动 APP2
启动 APP3
启动 APP4
启动 APP5
在浏览器中打开 Html 文件,点击标签,就可以进行测试了
这里需要注意:
多个intent-filter是平级关系,如果嵌套在一起,会出现桌面没有 App 图标的情况
注意data标签中的scheme标签文本是不支持大写的
注意data标签中的host标签的使用
注意上边两个data标签不能放在一个intent-filter 中
在 Activity 中通过 intent 来获取数据
private HashMap browserMap = new HashMap<>();// 浏览器数据
/**
* 从浏览器获取数据[方法一]
*/
private void getParameterFromBrowser() {
Intent intent = getIntent();
Uri data = intent.getData();
if (data == null) return;
browserMap.put("scheme", data.getScheme());
browserMap.put("host", data.getHost());
Set queryParameterNames = data.getQueryParameterNames();
String[] queryParamNameArray = (String[]) queryParameterNames.toArray();
for (int i = 0; i < queryParamNameArray.length; i++) {
String key = queryParamNameArray[i];
browserMap.put(key, data.getQueryParameter(key));
}
}
在 Activity 中通过 intent 来获取数据
/**
* 从浏览器获取数据[方法二]
*/
private void getDataFromBrowser() {
Intent intent = getIntent();
String uri = intent.getDataString();
if (uri != null) {
String scheme = intent.getScheme();
String leave = uri.split(scheme + "://")[1];
String query;
if (leave.contains("?")) {
query = leave.split("\\?")[1];
} else {
query = leave;
}
browserMap = new HashMap();
String[] split = query.split("&");
for (int i = 0; i < split.length; i++) {
String key = split[i].split("=")[0];
String value = split[i].split("=")[1];
browserMap.put(key, value);
}
browserMap.toString();
}
}
注意: 这种方式是直接对从 xml 中获取到的启动字符串进行拆分截取从而获取到想要的数据,如果该串中包含了一个 url 的参数需要进行 URL 编码 否则解析会出现异常。