標籤:
第一:調用系統簡訊介面直接傳送簡訊;主要代碼如下:
/** * 直接調用簡訊介面發簡訊 * * @param phoneNumber * @param message */ public void sendSMS(String phoneNumber, String message) { // 擷取簡訊管理器 android.telephony.SmsManager smsManager = android.telephony.SmsManager .getDefault(); // 拆分簡訊內容(手機簡訊長度限制) List<String> divideContents = smsManager.divideMessage(message); for (String text : divideContents) { smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI); } }
第二:調起系統發簡訊功能;主要代碼如下:
/** * 調起系統發簡訊功能 * @param phoneNumber * @param message */ public void doSendSMSTo(String phoneNumber,String message){ if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){ Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber)); intent.putExtra("sms_body", message); startActivity(intent); } }
下面來主要講解第一種方法,第一種方法可以監控發送狀態和對方接收狀態使用的比較多。
處理返回的狀態碼如下:
//處理返回的發送狀態 String SENT_SMS_ACTION = "SENT_SMS_ACTION"; Intent sentIntent = new Intent(SENT_SMS_ACTION); sentPI= PendingIntent.getBroadcast(this, 0, sentIntent, 0); // register the Broadcast Receivers this.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(MainActivity.this, "簡訊發送成功", Toast.LENGTH_SHORT) .show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: break; case SmsManager.RESULT_ERROR_RADIO_OFF: break; case SmsManager.RESULT_ERROR_NULL_PDU: break; } } }, new IntentFilter(SENT_SMS_ACTION)); //處理返回的接收狀態 String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; // create the deilverIntent parameter Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0); this.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { Toast.makeText(MainActivity.this, "收信人已經成功接收", Toast.LENGTH_SHORT) .show(); } }, new IntentFilter(DELIVERED_SMS_ACTION));
別忘了許可權的問題:
<uses-permission android:name="android.permission.SEND_SMS" />
傳送簡訊的參數說明:
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
-- destinationAddress:目標電話號碼
-- scAddress:簡訊中心號碼,測試可以不填
-- text: 簡訊內容
-- sentIntent:發送 -->中國移動 --> 中國移動發送失敗 --> 返回傳送成功或失敗訊號 --> 後續處理 即,這個意圖封裝了簡訊發送狀態的資訊
-- deliveryIntent: 發送 -->中國移動 --> 中國移動發送成功 --> 返回對方是否收到這個資訊 --> 後續處理 即:這個意圖封裝了簡訊是否被對方收到的狀態資訊(供應商已經發送成功,但是對方沒有收到)。
源碼:http://download.csdn.net/detail/zyw_java/8917057
Android之傳送簡訊的兩種方式