Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 監聽SMS短信

Android 監聽SMS短信

編輯:關於Android編程

當設備接收到一條新的SMS消息時,就會廣播一個包含了android.provider.Telephony.SMS_RECEIVED動作的Intent。注意,這個動作是一個字符串值,SDK 1.0不再包含對這個字符串的引用,因此,在你的應用程序中,你需要顯式的指定它。

對於應用程序監聽SMS Intent廣播,首先需要添加RECEIVE_SMS權限。通過在應用程序manifest中添加一個uses-permission,如下面的片段所示:

SMS廣播Intent包含了新來SMS的細節。為了提取包裝在SMS廣播Intent的Bundle中的SmsMessage對象數組,使用pdus key來提取SMS pdus數組,其中,每個對象表示一個SMS消息。將每個pdu字節數組轉化成SmsMessage對象,調用SmsMessage.createFromPdu,傳入每個字節數組,如下面的片段所示:

Bundle bundle = intent.getExtras();

if (bundle != null) {

Object[] pdus = (Object[]) bundle.get(“pdus”);

SmsMessage[] messages = new SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++)

messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

}

每個SmsMessage對象包含SMS 消息的細節,包括源地址(手機號),時間和消息體。

下面的例子演示了一個Broadcast Receiver實現了onReceive函數來檢查新來的短信是否以@echo字符串開始,如果是,發送相同的文本給那個手機:

public class IncomingSMSReceiver extends BroadcastReceiver

{

private static final String queryString = “@echo “;

private static final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;

public void onReceive(Context _context, Intent _intent)

{

if (_intent.getAction().equals(SMS_RECEIVED))

{

SmsManager sms = SmsManager.getDefault();

Bundle bundle = _intent.getExtras();

if (bundle != null)

{

Object[] pdus = (Object[]) bundle.get(“pdus”);

SmsMessage[] messages = new SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++)

messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

for (SmsMessage message : messages)

{

String msg = message.getMessageBody();

String to = message.getOriginatingAddress();

if (msg.toLowerCase().startsWith(queryString))

{

String out = msg.substring(queryString.length());

sms.sendTextMessage(to, null, out, null, null);

}

}

}

}

}

}

為了監聽短信,使用Intent Filter來注冊Broadcast Receiver,使其監聽android.provider.Telephony.SMS_RECEIVED動作,如下面的片段所示:

final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;

IntentFilter filter = new IntentFilter(SMS_RECEIVED);

BroadcastReceiver receiver = new IncomingSMSReceiver();

  registerReceiver(receiver, filter);
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved