IntentFilter匹配规则

   启动activity分为隐式启动和显式启动,其中隐式启动不指定具体的activity,而是通过一些条件来匹配,分别是category ,action,data。一个intent必须同时匹配这三个条件才能启动相应的activity。一个activity可以有多个action,category和data。


action的匹配规则


   action是一个字符串。系统预定义了一些action,也可以在应用中自定义action。如果activity指定了action,那么intent中也必须指定完全相同的action。否则匹配失败。若activity中一个intent-filter指定了多个action,则intent中只要有一个能和这些action匹配就算成功。


category的匹配规则


   category是一个字符串。系统定义了一些category,同时也可以自己在应用中定义category。如果intent中指定了category,那么intent中所有的category都必须能够与intent-filter中的其中一个category匹配。 intent也可以不指定category,同样可以匹配成功。因为系统在startActivity或者startActivityForResult时会自动给intent
加上android.intent.category.DEFAULT这个category。因此我们在写activity时为了activity能接收隐式调用,要给activity加上
这个category。


data的匹配规则


   data的匹配规则和action类似。如果过滤规则中定义了data,那么intent中必须有对应的data。

        
        .....
 


  比如上面这种这种过滤规则,intent中的mimeType属性必须为"image/*"才能匹配。data同时还要指定一个URI。
在过滤规则中虽然没有uri属性,但是却有默认值,当过滤规则中不指定URI时,intent中的uri部分的schema必须是content
或者file才能匹配。
   上面例子中可以这么来匹配
intent.setDataAndType(Uri.parse("file://abc"),"image/png");


 

你可能感兴趣的:(Android)