使用Intent实现Activity的隐式跳转

时间:2023-03-10 06:03:24
使用Intent实现Activity的隐式跳转

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

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

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

  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 则可以实现隐式跳转

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

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

下面是具体代码:

MainActivity 部分:

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

AndroidManfest.xml 部分

  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. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="17" />
  9. <application
  10. android:allowBackup="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:theme="@style/AppTheme">
  14. <activity
  15. android:name="cn.com.qiang.buttonjump.MainActivity"
  16. android:label="@string/app_name" >
  17. <intent-filter>
  18. <action android:name="android.intent.action.MAIN" />
  19. <category android:name="android.intent.category.LAUNCHER" />
  20. </intent-filter>
  21. </activity>
  22. <activity
  23. android:name="cn.com.qiang.buttonjump.SecondActivity">
  24. <intent-filter >
  25. <action android:name="jump"/>
  26. <category android:name="android.intent.category.DEFAULT"/>
  27. </intent-filter>
  28. </activity>
  29. </application>
  30. </manifest>