
第十七課:Boardcast Receiver
Boardcast Receiver是android的4大主要元件之一。它很重要,但不一定經常用到。Boardcast Receiver接收系統的事件廣播,讓程序也能按你的意思去享應一些系統上的事件,如開機完成,收到電話或SMS等。由於它很特別,不大可能找到替代品。Boardcast Receiver很易理解,它主要工作就是處理時件。在AndroidManifest中,我們要為個別的BroadcastReceiver加入intent filter。系統會按Intent filter,把相關的intent傳到這boardcast receiver。同時,我們可以加入多個BroadcastReceiver。本例是一個享應接收SMS的應用。
一個android的app中,不一定要有activity。為方便理解,本例中只有一個receiver。一般情況下,我們有不同的activity跟BroadcastReceiver一起運作。
新增一個名為SMSReceiver的project,但不要生成默認的activity。打開AndroidManifest.xml,加上我們用到的android.permission.RECEIVE_SMS權限。我們將會新增一個SMSReceiver的BroadcastReceiver,因此大可先把它的intent filter也一同加到AndroidManifest.xml中。
新增一個名為SMSReceiver的class。由於它是個boardcast receiver,現在直接entends BroadcastReceiver。打開SMSReceiver,onReceive(Context, Intent)已自動生成。我們將在onReceive中處理傳來的intent。把以下的幾句加到onReceive中:
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
{
Toast.makeText(context, "SMS received!", Toast.LENGTH_LONG).show();
}
}
收到intent時,把intent的action拿出來,看看是不是我們想要的SMS_RECEIVED。如果正確,便顯示出來。
接著,運行模擬器測試。把apk安裝好後,打開command prompt,用telnet模擬收到SMS,telnet到localhost:5554。
c:\telnet localhost 5554
把以下命令輸入到telnet的介面(9999999是電話號碼,hello則是SMS的內容):
sms send 99999999 hello
這時,模擬器便會收到SMS,boardcast receiver也會收到這intent。
Download: SMSReceiver