許多新的應用程式會考慮使用SMS作為資料分發平台。現實一點的情境:電影點播系統要求使用者發送一定格式的簡訊來進行自動點播。現在越來越多的應用採用SMS作為與使用者進行資料交換的方式。現在讓我們來看一下我們如何在Android平台上來構造這種形式的應用。
Android API支援開發可以發送和接收SMS訊息的應用程式。目前我們開發過程中使用的Android模擬器還不支援發送SMS,但它可以接收SMS。現在我們來探索一下Android對SMS的支援,我們將會構建一個小小的應用程式來監聽行動裝置(或模擬器)上接收到的SMS訊息,並將它顯示出來。
我們來定義一個Intent接收器來處理SMS接收事件:
Java代碼
package com.wissen.sms.receiver; /** * 該類將在SMS接收的時候被調用 */ public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO } }
我們需要對這個Intent接收器進行配置以使它能擷取SMS接收事件,‘ android.provider.Telephony.SMS_RECEIVED’這個事件狀態表示了SMS已被接收。我們可以在AndroidManifest.xml中進行如下配置:
Xml代碼
<receiver android:name=”.receiver.SMSReceiver” android:enabled=”true”> <intent-filter> <action android:name=”android.provider.Telephony.SMS_RECEIVED” /> </intent-filter> </receiver>
為了能讓我們的應用能接收SMS,我們得先進行許可權的指定,可以在AndroidManifest.xml中如下配置:
Xml代碼
<uses-permission android:name=”android.permission.RECEIVE_SMS”></uses-permission>
現在,我們的Intent接收器就可以在Android裝置接收到SMS的時候被調用了,餘下的事情就是去擷取和顯示接收到的SMS訊息文本了:
Java代碼
public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object messages[] = (Object[]) bundle.get(”pdus”); SmsMessage smsMessage[] = new SmsMessage[messages.length]; for (int n = 0; n < messages.length; n++) { smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } // show first message Toast toast = Toast.makeText(context, “Received SMS: ” + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); toast.show(); }
Android裝置接收到的SMS是以pdu形式的(protocol description unit)。android.telephony.gsm.SmsMessage這個類可以儲存SMS的相關資訊,我們也可以從接收到的pdu中建立新的SmsMessage執行個體,Toast介面組件可以以系統通知的形式來顯示接收到的SMS訊息文本。
運行程式:
現在讓我們來在模擬器中運行這個應用程式,以及發送SMS訊息到這個模擬器上。我們可以在eclipse的Android外掛程式所提供的DDMS視圖(Dalvik Debug Monitor Service)中發送SMS訊息到模擬器上(在’Emulator Control’面板中;另外需要指定電話電話號碼,不過可以是任意的)
許多新的應用程式會考慮使用SMS作為資料分發平台。現實一點的情境:電影點播系統要求使用者發送一定格式的簡訊來進行自動點播。現在越來越多的應用採用SMS作為與使用者進行資料交換的方式。現在讓我們來看一下我們如何在Android平台上來構造這種形式的應用。
Android API支援開發可以發送和接收SMS訊息的應用程式。目前我們開發過程中使用的Android模擬器還不支援發送SMS,但它可以接收SMS。現在我們來探索一下Android對SMS的支援,我們將會構建一個小小的應用程式來監聽行動裝置(或模擬器)上接收到的SMS訊息,並將它顯示出來。
我們來定義一個Intent接收器來處理SMS接收事件:
Java代碼
package com.wissen.sms.receiver; /** * 該類將在SMS接收的時候被調用 */ public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO } }
我們需要對這個Intent接收器進行配置以使它能擷取SMS接收事件,‘ android.provider.Telephony.SMS_RECEIVED’這個事件狀態表示了SMS已被接收。我們可以在AndroidManifest.xml中進行如下配置:
Xml代碼
<receiver android:name=”.receiver.SMSReceiver” android:enabled=”true”> <intent-filter> <action android:name=”android.provider.Telephony.SMS_RECEIVED” /> </intent-filter> </receiver>
為了能讓我們的應用能接收SMS,我們得先進行許可權的指定,可以在AndroidManifest.xml中如下配置:
Xml代碼
<uses-permission android:name=”android.permission.RECEIVE_SMS”></uses-permission>
現在,我們的Intent接收器就可以在Android裝置接收到SMS的時候被調用了,餘下的事情就是去擷取和顯示接收到的SMS訊息文本了:
Java代碼
public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object messages[] = (Object[]) bundle.get(”pdus”); SmsMessage smsMessage[] = new SmsMessage[messages.length]; for (int n = 0; n < messages.length; n++) { smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } // show first message Toast toast = Toast.makeText(context, “Received SMS: ” + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); toast.show(); }
Android裝置接收到的SMS是以pdu形式的(protocol description unit)。android.telephony.gsm.SmsMessage這個類可以儲存SMS的相關資訊,我們也可以從接收到的pdu中建立新的SmsMessage執行個體,Toast介面組件可以以系統通知的形式來顯示接收到的SMS訊息文本。
運行程式:
現在讓我們來在模擬器中運行這個應用程式,以及發送SMS訊息到這個模擬器上。我們可以在eclipse的Android外掛程式所提供的DDMS視圖(Dalvik Debug Monitor Service)中發送SMS訊息到模擬器上(在’Emulator Control’面板中;另外需要指定電話電話號碼,不過可以是任意的)