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



留言
張貼留言