Android 四大元件 —— 活動(活動的隱式跳轉)
上一篇我們討論了活動的顯示跳轉,現在來學習活動的隱式跳轉
相比於顯式Intent,隱式Intent 則含蓄了許多,它並不明確指出我們想要啟動哪一個活動,而是指定了一系列更為抽象的action 和category 等資訊,然後交由系統去分析這個Intent,並幫我們找出合適的活動去啟動。
什麼叫做合適的活動呢?簡單來說就是可以響應我們這個隱式Intent 的活動,那麼目前SecondActivity 可以響應什麼樣的隱式Intent 呢?額,現在好像還什麼都響應不了,不過很快就會有了。
第一步 通過在<activity>標籤下配置<intent-filter>的內容,可以指定當前活動能夠響應的action和category,開啟AndroidManifest.xml,新增如下程式碼:
<activity android:name="cn.com.qiang.buttonjump.SecondActivity"> <intent-filter > <action android:name="jump"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
在<action> 標籤中我們指明瞭當前活動可以響應com.example.activitytest.ACTION_START 這個action,而<category>標籤則包含了一些附加資訊,更精確地指明瞭當前的活動能夠響應的Intent 中還可能帶有的category。只有<action>和<category>中的內容同時能夠匹配上Intent 中指定的action 和category 時,這個活動才能響應該Intent。
第二步 在MainAcivity 中呼叫setAction 及 addCategory 則可以實現隱式跳轉
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("jump");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
});
重新執行程式,在MainActivity 的介面點選一下按鈕,你同樣成功啟動SecondActivity了。不同的是,這次你是使用了隱式Intent 的方式來啟動的,說明我們在<activity>標籤下配置的action 和category 的內容已經生效了!
下面是具體程式碼:
MainActivity 部分:
package cn.com.qiang.buttonjump;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("jump");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
});
}
}
AndroidManfest.xml 部分
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com.qiang.buttonjump"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="cn.com.qiang.buttonjump.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.com.qiang.buttonjump.SecondActivity">
<intent-filter >
<action android:name="jump"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>