Android基礎入門教程——10.2 SmsManager(簡訊管理器)

來源:互聯網
上載者:User

標籤:android   smsmanager   簡訊管理器   簡訊發送   

Android基礎入門教程——10.2 SmsManager(簡訊管理器)

標籤(空格分隔): Android基礎入門教程

本節引言:

本節帶來的是Android中的SmsManager(短息管理器),見名知意,就是用來管理手機簡訊的,
而該類的應用情境並不多,一般是我們發簡訊的時候才會用到這個API,當然這種簡訊是
文字簡訊,對於多媒體訊息過於複雜,而且在QQ各種社交APP橫行的年代,你會去發1塊錢一條的
多媒體訊息嗎?所以本節我們只討論發送普通文字簡訊!
官方文檔:SmsManager

1.調用系統傳送簡訊功能:

就是把寫好的收信人和內容發送到系統的傳送簡訊的介面,使用者驗證收件者內容是否真正確再點擊發送!
說白了就是調用系統發簡訊的視窗,這樣做有一定的好處:
這樣發簡訊,app安裝的時候就可以少寫一條發簡訊的許可權,那麼諸如360這類安全軟體在安裝的時候
就不會提醒使用者:”這個APP有簡訊許可權,可能會偷偷滴發簡訊喔”,而使用者對於偷偷發簡訊的行為是十分
厭惡的,當然有些人不看直接安裝,而有些人可能會覺得會偷偷發簡訊喔,好噁心的應用,我才不裝咧,
又或者直接禁止我們的APP傳送簡訊,那麼當我們APP在傳送簡訊的時候就可能會出現一些異常,或者
應用直接崩潰等!所以如果你的應用需要傳送簡訊進行驗證或者付費這些東西的話,建議使用這種方式!

核心代碼

 public void SendSMSTo(String phoneNumber,String message){        //判斷輸入的phoneNumber是否為合法電話號碼      if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){          //Uri.parse("smsto") 這裡是轉換為指定Uri,固定寫法          Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));                intent.putExtra("sms_body", message);                      startActivity(intent);        }    }    
2.調用系統提供的簡訊介面傳送簡訊

這個就需要發簡訊的許可權啦
<uses-permission android:name=”android.permission.SEND_SMS”/>
我們直接調用SmsManager為我們提供的簡訊介面傳送簡訊:
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliverIntent);
參數依次是:

  • destinationAddress:收信人的電話號碼
  • scAddress:簡訊中心的號碼,null的話使用當前預設的簡訊服務中心
  • text:簡訊內容
  • sentIntent:簡訊發送狀態的資訊:(發送狀態的Intent)
    如果不為null,當訊息成功發送或失敗這個PendingIntent就廣播。結果代碼是Activity.RESULT_OK
    表示成功,或RESULT_ERROR_GENERIC_FAILURE、RESULT_ERROR_RADIO_OFF、RESULT_ERROR_NULL_PDU
    之一表示錯誤。對應RESULT_ERROR_GENERIC_FAILURE,sentIntent可能包括額外的“錯誤碼”包含一
    個無線電廣播技術特定的值,通常只在修複故障時有用。每一個基於SMS的應用程式控制檢測sentIntent。
    如果sentIntent是空,調用者將檢測所有未知的應用程式,這將導致在檢測的時候發送較小數量的SMS。
  • deliverIntent:簡訊是否被對方收到的狀態資訊:(接收狀態的Intent)
    如果不為null,當這個簡訊發送到接收者那裡,這個PendtingIntent會被廣播,
    狀態報表產生的pdu(指對等層次之間傳遞的資料單位)會拓展到資料(”pdu”)

…那麼複雜,pdu是什麼卵?好吧,別糾結,簡單知道這些參數是:
電話號碼,資訊中心,簡訊內容,是否發送成功的監聽,以及收信人是否接受的監聽就好了!

核心代碼

public void sendSMS(String phoneNumber,String message){      //擷取簡訊管理器       android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();      //拆分簡訊內容(手機簡訊長度限制),貌似長度限制為140個字元,就是    //只能發送70個漢字,多了要拆分成多條簡訊發送    //第四五個參數,如果沒有需要監聽發送狀態與接收狀態的話可以寫null        List<String> divideContents = smsManager.divideMessage(message);       for (String text : divideContents) {            smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI);        }  } 

可能你還需要監聽簡訊是否發送成功,或者收信人是否接收到資訊,就把下面的加上吧:

1)處理返回傳送狀態的sentIntent

//處理返回的發送狀態   String SENT_SMS_ACTION = "SENT_SMS_ACTION";  Intent sentIntent = new Intent(SENT_SMS_ACTION);  PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent,  0);  //註冊發送資訊的廣播接收者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:          //沒有提供pdu            break;              case SmsManager.RESULT_ERROR_NO_SERVICE:         //服務當前不可用            break;                      }      }  }, new IntentFilter(SENT_SMS_ACTION));  

2)處理返回接收狀態的deliverIntent

//處理返回的接收狀態   String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";  //建立接收返回的接收狀態的Intent  Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);  PendingIntent deliverPI = 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)); 

另外這裡涉及到了廣播的知識,如果你對廣播不怎麼瞭解的話,可以看下:

Android基礎入門教程——4.3.1 BroadcastReceiver牛刀小試
Android基礎入門教程——4.3.2 BroadcastReceiver庖丁解牛

本節小結:

好的,本節介紹了SmsManager發送文字簡訊的兩種方式~非常簡單~建議還是使用
第一種方案吧,起碼使用者體驗好一點…

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android基礎入門教程——10.2 SmsManager(簡訊管理器)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.