首页 > 代码库 > 使用Intent实现Activity的隐式跳转

使用Intent实现Activity的隐式跳转

      相比于显式Intent,隐式Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。

       什么叫做合适的活动呢?简单来说就是可以响应我们这个隐式Intent 的活动,那么目前SecondActivity 可以响应什么样的隐式Intent 呢?额,现在好像还什么都响应不了,不过很快就会有了。

      第一步  通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码:

[java] view plain copy
 
  1. <activity   
  2.             android:name="cn.com.qiang.buttonjump.SecondActivity">  
  3.             <intent-filter >  
  4.                 <action android:name="jump"/>  
  5.                 <category android:name="android.intent.category.DEFAULT"/>  
  6.             </intent-filter>  
  7. </activity>  

       在<action> 标签中我们指明了当前活动可以响应com.example.activitytest.ACTION_START 这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent 中还可能带有的category。只有<action>和<category>中的内容同时能够匹配上Intent 中指定的action 和category 时,这个活动才能响应该Intent。

 

       第二步    在MainAcivity 中调用setAction 及 addCategory 则可以实现隐式跳转

[java] view plain copy
 
  1. button1.setOnClickListener(new OnClickListener() {  
  2.               
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         Intent intent = new Intent();  
  6.         intent.setAction("jump");  
  7.         intent.addCategory("android.intent.category.DEFAULT");  
  8.                   
  9.         startActivity(intent);  
  10.     }  
  11. });  

重新运行程序,在MainActivity 的界面点击一下按钮,你同样成功启动SecondActivity了。不同的是,这次你是使用了隐式Intent 的方式来启动的,说明我们在<activity>标签下配置的action 和category 的内容已经生效了!

 

下面是具体代码:

MainActivity 部分:

[java] view plain copy
 
  1. package cn.com.qiang.buttonjump;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.content.Intent;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.   
  10. public class MainActivity extends Activity {  
  11.   
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_main);  
  16.       
  17.         Button button1 = (Button)findViewById(R.id.button1);  
  18.         button1.setOnClickListener(new OnClickListener() {  
  19.               
  20.             @Override  
  21.             public void onClick(View v) {  
  22.                 Intent intent = new Intent();  
  23.                 intent.setAction("jump");  
  24.                 intent.addCategory("android.intent.category.DEFAULT");  
  25.                   
  26.                 startActivity(intent);  
  27.             }  
  28.         });  
  29.     }  
  30. }  

AndroidManfest.xml 部分

[java] view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="cn.com.qiang.buttonjump"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="17" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme">  
  16.         <activity  
  17.             android:name="cn.com.qiang.buttonjump.MainActivity"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.           
  26.         <activity   
  27.             android:name="cn.com.qiang.buttonjump.SecondActivity">  
  28.             <intent-filter >  
  29.                 <action android:name="jump"/>  
  30.                 <category android:name="android.intent.category.DEFAULT"/>  
  31.             </intent-filter>  
  32.         </activity>  
  33.     </application>  
  34.   
  35. </manifest>  

使用Intent实现Activity的隐式跳转