android傳送簡訊以及監聽傳送狀態
阿新 • • 發佈:2019-01-06
自定義ACTION常數,作為廣播的Intent Filter識別常數
private String SMS_SEND_ACTIOIN = "SMS_SEND_ACTIOIN";
private String SMS_DELIVERED_ACTION = "SMS_DELIVERED_ACTION";
其中,SMS_SEND_ACTIOIN 為傳送成功接收到的回覆;SMS_DELIVERED_ACTION 是簡訊接受者接受到簡訊的回覆;
根據運營商的不同,SMS_DELIVERED_ACTION 回覆與否也不同。可以親自試驗下。
自定義mServiceReceiver覆蓋BroadcastReceiver聆聽簡訊狀態資訊
public class MyServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub try { /* android.content.BroadcastReceiver.getResultCode()方法 */ switch (getResultCode()) { case Activity.RESULT_OK: /* 傳送簡訊成功 */ Log.d("lmn", sendNums + "----傳送簡訊成功---------------------------"); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: /* 傳送簡訊失敗 */ case SmsManager.RESULT_ERROR_RADIO_OFF: case SmsManager.RESULT_ERROR_NULL_PDU: default: Log.d("lmn", sendNums + "----傳送簡訊失敗---------------------------"); break; } } catch (Exception e) { e.getStackTrace(); } } }
在oncreate中註冊廣播事件:
/* 自定義IntentFilter為SENT_SMS_ACTIOIN Receiver */ IntentFilter mFilter01; mFilter01 = new IntentFilter(SMS_SEND_ACTIOIN); mReceiver01 = new MyServiceReceiver(); registerReceiver(mReceiver01, mFilter01); /* 自定義IntentFilter為DELIVERED_SMS_ACTION Receiver */ mFilter01 = new IntentFilter(SMS_DELIVERED_ACTION); mReceiver02 = new MyServiceReceiver(); registerReceiver(mReceiver02, mFilter01);
同時在 onDestroy 中取消:
/* 取消註冊自定義Receiver */
if (mReceiver01 != null && mReceiver02 != null) {
unregisterReceiver(mReceiver01);
unregisterReceiver(mReceiver02);
}
傳送簡訊:
SmsManager smsManager = SmsManager.getDefault();
/* 建立自定義Action常數的Intent(給PendingIntent引數之用) */
Intent itSend = new Intent(SMS_SEND_ACTIOIN);
itSend.putExtras(b);
/* sentIntent引數為傳送後接受的廣播資訊PendingIntent */
PendingIntent mSendPI = PendingIntent.getBroadcast(
getApplicationContext(),
(int) System.currentTimeMillis(), itSend,
PendingIntent.FLAG_UPDATE_CURRENT);
Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
itDeliver.putExtras(b);
/* deliveryIntent引數為送達後接受的廣播資訊PendingIntent */
PendingIntent mDeliverPI = PendingIntent.getBroadcast(
getApplicationContext(),
(int) System.currentTimeMillis(), itDeliver,
PendingIntent.FLAG_UPDATE_CURRENT);
// 傳送簡訊
smsManager.sendTextMessage(sendNum, null, strMessage,
mSendPI, mDeliverPI);