显示Intent,隐式Intent


转自:http://blog.csdn.net/caesardadi/article/details/20363669


Intent 分为两种显示Intent,隐式Intent。


1.显式intent

[java]  view plain  copy
 
  1. Intent intent = new Intent(context, NavigationActivity.class);  
  2. intent.putExtra(Constants.INVALID_USER, true);  
  3. context.startActivity(intent);  

需要明确指定需要激活的Activity.


2.隐式Intent

在使用Intent进行跳转时,没有明确指定跳转的Activity或者Service.通过Intent-Filter(Intent过滤器)进行匹配过滤,会跳转到符合匹配条件的Activity或者Service。如果有多个同时匹配,会弹出对话框,供用户来选择激活哪个组件,如调用手机浏览器。


隐式Intentd的使用如下:


首先在清单文件AndroidManifest.xml的Activity声明中添加Intent-filter

[java]  view plain  copy
 
  1. <activity>  
  2.     <intent-filter>  
  3.         <action android:name="...."/>  
  4.         <category android:name="...."/>  
  5.         <category android:name="android.intent.category.DEFAULT"/>      
  6.         <data android:scheme="..." android:host="..." android:path="/..." android:type="..."/>  
  7.     </intent-filter>  
  8. </activity>  


然后在需要跳转的地方添加

[java]  view plain  copy
 
  1. Intent intent = new Intent();  
  2. intent.setAction("....");  
  3. intent.addCategory("....");  
  4. intent.setData(Uri.parse("...."));  
  5. //设置data的scheme、host、path条件  
  6. intent.setDataAndType(Uri.parse(""),String type);  
  7. //同时设置data的scheme、host、path、type条件  
  8. startActivity(intent);  


注意:如果在Intent-filter中的data中多了一个Android:mimeType="text/*",此时在跳转的地方不能使用intent.setData,而要使用intent.setDataAndType();


详细说下intent-filter

[java]  view plain  copy
 
  1. <activity  
  2.            android:name="com.tencent.tauth.AuthActivity"  
  3.            android:noHistory="true"  
  4.            android:launchMode="singleTask">  
  5.            <intent-filter>  
  6.                <action android:name="android.intent.action.VIEW" />  
  7.   
  8.                <category android:name="android.intent.category.DEFAULT" />  
  9.                <category android:name="android.intent.category.BROWSABLE" />  
  10.   
  11.                <data android:scheme="tencent100559646" />  
  12.            </intent-filter>  
  13.        </activity>  

action 动作

  一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。

  如果Intent请求的Action和<intent-filter>中个某一条<action>匹配,那么该Intent就通过了这条<intent-filter>的动作测试。

  如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。

  (1) 如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配;

  (2) 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺利地通过<intent-filter>的行为测试。


category 类别

只有当Intent请求中所有的Category与组件中某一个Intent-filter的<category>完全匹配时,才会让该Intent请求通过测试,Intent-filter中多余的<category>声明并不会导致匹配失败。即只要intent-filter中德category包含intent请求时设置的category即可。

android.intent.category.DEFAULT的作用

每一个通过 startActivity()方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent匹配失败。


你可能感兴趣的:(显示Intent,隐式Intent)