详解Android中Intent对象与Intent Filter过滤匹配过程

2019-12-10 19:42:54于海丽

 

<intent-filter>
 <action android:name="com.ispring.action.ACTION_TEST1" />
 <action android:name="com.ispring.action.ACTION_TEST2" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

intent对象可以通过setAction()方法设置唯一的一个action值。对于action测试,需要分两种情况:

intent对象设置了action 
如果intent对象通过调用setAction()方法设置了action的值,那么只有当组件的intent-filter中包含了intent对象中的action值的时候,action测试才通过,否则无法通过。 
举个例子,假设我们的Activity的intent-filter如下所示:

<intent-filter>
 <action android:name="com.ispring.action.ACTION_TEST1" />
 <action android:name="com.ispring.action.ACTION_TEST2" />
 <category android:name="android.intent.category.DEFAULT" />
 <data android:scheme="ispring" android:host="blog.csdn.net" />
</intent-filter>

下面的intent对象可以通过上面intent-filter里面的action测试:

Intent intent = new Intent();
intent.setAction("com.ispring.action.ACTION_TEST1");
Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");
intent.setData(uri);

该intent之所以能通过action测试是因为intent-filter中包含该intent的action值com.ispring.action.ACTION_TEST1。

下面的intent对象无法通过上面intent-filter里面的action测试:

Intent intent = new Intent();
intent.setAction("com.ispring.action.ACTION_TEST3");
Uri uri = Uri.parse("ispring://blog.csdn.net/sunqunsunqun");
intent.setData(uri);