
第六課:使用Implicit intent
本文將介紹如何使用implicit intent去呼叫系統中的應用。跟explict intent不同,implicit intent是不用知道呼叫的目標。 implicit intent可reuse已安裝好的元件,而你也不須擔心它將會怎樣運作,也可以完成工作,就像一個黑盒。 那麼android系統怎麼知道什麼應用可以合乎你的要求呢?就是檢查intent filter。當我們新增一個元件後,便會到 androidManifest.xml去宣告這個元件,以及這元件的intent filter。
intent filter可設定三類資料:
當android系收到implicit intent時,就會在已安裝的應用的androidManifest.xml中查看intent filter,如找到合適的元件, 便可進行呼叫,你亦不用知道那個元件將會用什麼方式工作。如可用元件多於一個,系統便會給用戶自己選擇。由此可見,這是 runtime才會決定怎麼運行的。
我們經常會用到implicit intent,特別是一些系統上的工作,因為我們不必自行再編寫想要的功能,如發email,打電話等。
先建立一個PhoneCall的android project,打開main.xml,為它加上一個id為btnCallMe的Button,用來trigger implicit intent 呼叫。
在已自動生成的PhoneCallActivity中找出btnCallMe,於onClick中加上以下幾句:
btnCallMe = (Button)findViewById(R.id.btnCallMe);
btnCallMe.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String phone = "tel:12345678";
Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(phone));
startActivity(i);
}
});
可以看出我們沒有跟上一課一樣設定目標元件(class),反而設定了Intent.ACTION_CALL (action),和該action要用的data。
最後,打開androidManifest.xml,加上需要的打電話權限,即android.permission.CALL_PHONE。
Download: Source code