天天看點

android 發送短信的兩種方式,以及接收報告和發送報告

         android發送短信,以及接收報告和發送報告

         android中發送短信其實有兩種方式,這個和打電話類似,大家可以了解一下:

一、調起系統發短信功能

             代碼如下:

/**
     * 調起系統發短信功能
     * @param phoneNumber 發送短信的接收号碼
     * @param message     短信内容
     */
    public void SendSMS(String phoneNumber,String message){
            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));          
            intent.putExtra("sms_body", message);          
            startActivity(intent);
    }      

二、調用系統短信接口直接發送短信

                  首先先介紹一下,發送短信相關的api,主要依靠的是

sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

     destinationAddress      發送短信的位址(也就是号碼)
      scAddress               短信服務中心,如果為null,就是用目前預設的短信服務中心
      text                    短信内容
      sentIntent              如果不為null,當短信發送成功或者失敗時,這個PendingIntent會被廣播出去成功的結果代碼是Activity.RESULT_OK,或者下面這些錯誤之一  :RESULT_ERROR_GENERIC_FAILURE,RESULT_ERROR_RADIO_OFF,RESULT_ERROR_NULL_PDU等     
                                      通俗點說: 發送 -->中國移動 --> 中國移動發送失敗 --> 傳回發送成功或失敗信号 --> 後續處理   即,這個意圖包裝了短信發送狀态的資訊                           
      deliveryIntent          如果不為null,當這個短信發送到接收者那裡,這個PendtingIntent會被廣播,狀态報告生成的pdu(指對等層次之間傳遞的資料機關)會拓展到資料("pdu")
                                       通俗點就是:發送 -->中國電信 --> 中國電信發送成功 --> 傳回對方是否收到這個資訊 --> 後續處理  即:這個意圖包裝了短信是否被對方收到的狀态資訊(供應商已經發送成功,但是對方沒有收到)。      

                  正式開始操作

                1.首先要添權重限!

<uses-permission android:name="android.permission.SEND_SMS" />      

             2.發送短信的核心代碼:

               (1)如果你不需要發送報告,那麼直接使用:

/**
     * 直接調用短信接口發短信,不含發送報告和接受報告
     * 
     * @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, null, null);
        }
    }      

             (2)如果你需要發送報告和接收報告,那麼我們開始:

             我們先定義兩個接受方法,用作接收發送報告以及接收報告

                 發送報告

//處理傳回的發送狀态 
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sendIntent= PendingIntent.getBroadcast(context, 0, sentIntent,
        0);
// register the Broadcast Receivers
context.registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context _context, Intent _intent) {
        switch (getResultCode()) {
        case Activity.RESULT_OK:
            Toast.makeText(context,
        "短信發送成功", 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);
PendingIntent backIntent= PendingIntent.getBroadcast(context, 0,
       deliverIntent, 0);
context.registerReceiver(new BroadcastReceiver() {
   @Override
   public void onReceive(Context _context, Intent _intent) {
       Toast.makeText(context,
  "收信人已經成功接收", Toast.LENGTH_SHORT)
  .show();
   }
}, new IntentFilter(DELIVERED_SMS_ACTION));      

            發送短信代碼:

/**
     * 調用短信接口發短信,含接收報告和發送報告
     * 
     * @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, sendIntent, backIntent);
        }
    }      

感謝您的閱讀,如果文章中有錯誤或者您有什麼好的建議,也歡迎您直接留言批評指教。Thanks,friends!