如果想要你的程式能夠讀取收到的簡訊,
利用系統廣播的方式,擷取廣播訊息,
就可以把收到的簡訊,用你想要得呈現方式打開。
廣播還不熟悉的可以參考:
如何使用BroadcastReceiver
例子很簡單,直接完整程式碼呈現
跟之前偵測電池資訊那篇差不多,只不過這次不能馬上解除註冊,
因為不知道簡訊何時會傳過來,等到傳過來的時候,
再將註冊解除即可。
我們一樣擷取系統資訊,簡訊的系統資訊為:
所以就宣告成為一個字串,用來比對是否有擷取到這個訊息,
如果有我們就準備要打開簡訊了。
首先從Bundle取出簡訊,簡訊的識別字是pdus,它是一個物件陣列,
必須使用SmsMessage將陣列的每一列轉成SmsMessage,
由於我們只有要示範傳一封簡訊,因此只取出第一列就可以了,
然後利用一個字串將傳送訊息的位址以及內容串起來,
最後丟進TextView就可以看見了。
當然你想要丟進ListView或者其他的可以呈現文字的方式,也是可以的。
程式碼
http://uploadingit.com/file/cru4jqt2v6auhvzl/SMSBroadcastReceiverDemo.zip
利用系統廣播的方式,擷取廣播訊息,
就可以把收到的簡訊,用你想要得呈現方式打開。
廣播還不熟悉的可以參考:
如何使用BroadcastReceiver
例子很簡單,直接完整程式碼呈現
public class SMSBroadcastReceiverDemoActivity extends Activity {
/** Called when the activity is first created. */
private final static String MSG_RECEIVED =
"android.provider.Telephony.SMS_RECEIVED";
private Button closeBroadcast;
private TextView smsContent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
closeBroadcast = (Button)findViewById(R.id.close_broadcast);
smsContent = (TextView)findViewById(R.id.sms_content);
registerReceiver(mBroadcastReceiver,new IntentFilter(MSG_RECEIVED));
closeBroadcast.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
unregisterReceiver(mBroadcastReceiver);
}
});
}
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(MSG_RECEIVED)){
Bundle msg = intent.getExtras();
Object[] messages = (Object[]) msg.get("pdus");
SmsMessage sms = SmsMessage.createFromPdu((byte[])messages[0]);
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("From:"+sms.getDisplayOriginatingAddress()+"\n");
strBuilder.append("text:"+sms.getMessageBody());
smsContent.setText(strBuilder); }
}
};
}
跟之前偵測電池資訊那篇差不多,只不過這次不能馬上解除註冊,
因為不知道簡訊何時會傳過來,等到傳過來的時候,
再將註冊解除即可。
closeBroadcast.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
unregisterReceiver(mBroadcastReceiver);
}
});
我們一樣擷取系統資訊,簡訊的系統資訊為:
android.provider.Telephony.SMS_RECEIVED
所以就宣告成為一個字串,用來比對是否有擷取到這個訊息,
如果有我們就準備要打開簡訊了。
首先從Bundle取出簡訊,簡訊的識別字是pdus,它是一個物件陣列,
Bundle msg = intent.getExtras();
Object[] messages = (Object[]) msg.get("pdus");
必須使用SmsMessage將陣列的每一列轉成SmsMessage,
由於我們只有要示範傳一封簡訊,因此只取出第一列就可以了,
SmsMessage sms = SmsMessage.createFromPdu((byte[])messages[0]);
然後利用一個字串將傳送訊息的位址以及內容串起來,
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("From:"+sms.getDisplayOriginatingAddress()+"\n");
strBuilder.append("text:"+sms.getMessageBody());
最後丟進TextView就可以看見了。
smsContent.setText(strBuilder);
當然你想要丟進ListView或者其他的可以呈現文字的方式,也是可以的。
程式碼
http://uploadingit.com/file/cru4jqt2v6auhvzl/SMSBroadcastReceiverDemo.zip