android的SMS監聽

來源:互聯網
上載者:User

轉自http://www.cnblogs.com/xirihanlin/archive/2009/10/22/1588356.html

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

 

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

 

<uses-permission android:name=”android.permission.RECEIVE_SMS”/>

 

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”);   //這個.get(“pdus”)中的pdus字元是固定的SMS
pdus數組,sdk裡看不到,需要在原始碼裡查看

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”;   //這個在sdk裡也看不到,是監聽簡訊的必須要的,在原始碼裡看的到android-2.2-froyo/android/provider/Telephony.java

 

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);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.