@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("puds"); //提取短信消息
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0;i<messages.length;i++){
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
String address = messages[0].getOriginatingAddress();//獲取發送方號碼
String fullMessage = "";
for (SmsMessage message : messages){
fullMessage += message.getMessageBody();//獲取短信內容
}
sender.setText(address);
content.setText(fullMessage);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sender = (TextView) findViewById(R.id.sender);
content = (TextView) findViewById(R.id.content);
receiverFilter = new IntentFilter();
receiverFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
messageReceiver = new MessageReceiver();
destinationAddress | 發送短信的地址(也就是號碼) |
---|---|
scAddress | 短信服務中心,如果爲null,就是用當前默認的短信服務中心 |
text | 短信內容 |
sentIntent |
如果不爲null,當短信發送成功或者失敗時,這個PendingIntent會被廣播出去成功的結果代碼是Activity.RESULT_OK,或者下面這些錯誤之一 :RESULT_ERROR_GENERIC_FAILURE RESULT_ERROR_RADIO_OFF RESULT_ERROR_NULL_PDU 對於 RESULT_ERROR_GENERIC_FAILURE, the這個sentIntent可能包括額外的"errorCode",包含一些具體有用的信息幫助檢查 。基於SMS控制的全部程序檢查 sentIntent. 如果 sentIntent 爲空,the caller will be checked against all unknown applications,
which cause smaller number of SMS to be sent in checking period. |
deliveryIntent |
如果不爲null,當這個短信發送到接收者那裏,這個PendtingIntent會被廣播,狀態報告生成的pdu(指對等層次之間傳遞的數據單位)會拓展到數據("pdu")
|
msgInput = (EditText) findViewById(R.id.msg_input);
send = (Button) findViewById(R.id.send);
sendFilter = new IntentFilter();
sendFilter.addAction("SENT_SMS_ACTION");
sendStatusReceiver = new SendStatusReceiver();
registerReceiver(sendStatusReceiver,sendFilter);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SmsManager smsManager = SmsManager.getDefault();
Intent sentIntent = new Intent("SENT_SMS_ACTION");
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this,0,sentIntent,0);
smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), pi, null);
}
});
@Override
public void onReceive(Context context, Intent intent) {
if (getResultCode() == RESULT_OK){
Toast.makeText(context,"Send succeeded",Toast.LENGTH_LONG).show();
}else {
Toast.makeText(context,"Send failed",Toast.LENGTH_LONG).show();
}
}
}