Android 簡訊-接收
上個練習是發送簡訊
即然能發,就要能收
送出簡訊後,在手機端會自動跳出提示
說明:
主程式中沒有什麼特別的
主要是要注冊一個BroadcastReceiver
用於監聽當收到簡訊時,顯示簡訊內容
參考:
SMS_RECEIVED_ACTION
监听SMS消息
注意事項:
即然能發,就要能收
送出簡訊後,在手機端會自動跳出提示
說明:
主程式中沒有什麼特別的
主要是要注冊一個BroadcastReceiver
用於監聽當收到簡訊時,顯示簡訊內容
參考:
SMS_RECEIVED_ACTION
监听SMS消息
注意事項:
- uses permission 需要:RECEIVE_SMS
- AndroidManifect 需要注冊自訂的BroadcastReceiver
- 注冊後intent-filter設定
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
用於觸發接收到簡訊的事件
======================================================
<receiver android:name="com.example.sample_11_2.MyBroadcastReceiver">
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>"
======================================================
程式碼:
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ //當接受到簡訊時 Bundle bundle = intent.getExtras(); if(bundle != null){ Object[] myObjects =(Object[]) bundle.get("pdus"); //protocol description units 標準協定 //PDU可以是文字或多媒體,用Object陣列全包下來 SmsMessage[] messages = new SmsMessage[myObjects.length]; for(int i =0 ; i< myObjects.length ; i++){ messages[i] = SmsMessage.createFromPdu((byte[])myObjects[i]); //需將PDU格式轉成byte陣列 //將PDU格式的資料轉為smsMessage的格式 //由於簡訊長度的限制可能不止一封 } StringBuilder sb = new StringBuilder(); for(SmsMessage tempMessage : messages){ sb.append("收到來自:\n\n"); sb.append(tempMessage.getDisplayOriginatingAddress()+"\n\n"); sb.append("內容為:\n\n"); sb.append(tempMessage.getDisplayMessageBody()); } Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); } } } }
留言
張貼留言