android端manifest中对activity设置intent-filter的data属性和解释:
参考:https://www.cnblogs.com/wolipengbo/p/3427574.html
https://www.cnblogs.com/chenxuyuan/articles/5024230.html
1》、Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象,
Uri字符串总满足如下格式: scheme://host:port/path
比如:bai://com.bai.motian:8080/heart/in/love
2》、Data属性:
<data android:mimeType=""
android:scheme=""
android:host=""
android:port=""
android:path=""
android:pathPrefix=""
android:pathPattern=""/>
上面<data.../>元素支持如下属性。
mimeType:用于声明该组件所能匹配的Intent的Type属性。
scheme:用于声明该组件所能匹配的Intent的Data属性的scheme部分。
host:用于声明该组件所能匹配的Intent的Data属性的host部分。
port:用于声明该组件所能匹配的Intent的Data属性的port部分。
path:用于声明该组件所能匹配的Intentde Data属性的path部分。
pathPrefix:用于声明该组件所能匹配的Intent的Data属性的path前缀。
pathPattern:用于声明该组件所能匹配的Intent的的Data属性的path字符串模板。
3》、对应启动的data属性值意思
(1)、只要Intent的Data属性的scheme是lee,即可启动该Activity
<data android:scheme="bai" />
(2)、只要Intent的Data属性和scheme是bai,且host是com.bai.motian是8080即可启动该Activity
<data
android:scheme="bai"
android:host="com.bai.motian"
android:port="8080"/>
(3)、只要Intent的Data属性的scheme是bai,且host是com.bai.motian , path是/heart/in/love,即可启动该Activity
<data
android:host="com.bai.motian"
android:path="/heart/in/love"
android:scheme="bai" />
(4)、需要Intent的Data属性的scheme是bai,且host是com.bai.motian, port是8080,且path是/heart/in/love,才可启动该Activity
<data
android:host="com.bai.motian"
android:path="/heart/in/love"
android:port="8080"
android:scheme="bai" />
(5)、需要Intent的Data属性的scheme是bai,且host是com.bai.motian, port是8080,且path是/heart/in/love, 且type是abc/xyz,才可启动该Activity
<data
android:host="com.bai.motian"
android:mimeType="abc/xyz"
android:path="/heart/in/love"
android:port="8080"
android:scheme="bai" />
4》、启动一个activity使用例子:
public void scheme(View source){
Intent intent=new Intent();
//只设置Intent的Data属性
intent.setData(Uri.parse("bai://www.baidu.com:1234:test"));
startActivity(intent);
}
仅仅符合 <data android:scheme="bai" /> 所以只可以启动第一个activity
5》、android跑起来weex应用,跳转页面会弹出选择应用的框(手机上装有playground、和自己的app;原因是weex的filter使用的一样都是 com.taobao.android.intent.category.WEEX 所以会让你选择使用那一个)
解决办法:设置intent-filter的data属性
在android manifest中设置:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.taobao.android.intent.category.WEEX" />
<data android:scheme="bai" />
</intent-filter>
在weex端使用,需要统一管理navigator(重写push):
//指定scheme:
push(params, callback) {
if(params && params.url && params.url.indexOf("://")===-1){
params.url="bai://"+params.url;
}
navigator.push(params, callback)
},
也可以指定自己的path:
push(params, callback) {
if(params && params.url && params.url.indexOf("://")===-1){
params.url="bai://com.bai.motian/"+params.url;
}
navigator.push(params, callback)
},