先来一个实例代码:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*"/>
</intent-filter>
action匹配规则
Intent中的action必须能够和intent-filter中的某一个匹配成功,可以多个,只要有一个成功即可匹配成功,但是如果Intent中如果不存在action则匹配失败
category匹配规则
Intent中的category每一个都要跟intent-filter中的某一个匹配成功,Intent中可以不指定,系统会默认为Intent加上android.intent.category.DEFAULT
data匹配规则
<data
android:scheme="sttring"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeType="string"/>
URI结构
<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
示例
http://www.baidu.com:80/search/info
content://com.example.project:200/folder/subfolder/etc
规则:Intent中必须存在data,且data能完全匹配intent-filter中某一个data
注:若没有指定URI,则默认为content和file
例:
<intent-filter>
<data android:mimeType="image/*"/>
</intent-filter>
intent.setDataAndType(Uri.parse("file://abc"),"image/png");
网页中启动Activity
AndroidManifest.xml中
<activity android:name=".activity.TestActivity">
<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="test"
android:scheme="testapp" />
</intent-filter>
</activity>
网页中
<a href="testapp://test?id=100101&title=HelloAndroid">StartTestActivity</a>
Activity中获取参数
Uri data = intent.getData();
if(data != null){
String scheme = data.getScheme();
String host = data.getHost();
darenId = data.getQueryParameter("id");
userId = data.getQueryParameter("title");}