<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 10.2 SmsManager(短信管理器) ## 本節引言: > 本節帶來的是Android中的SmsManager(短息管理器),見名知意,就是用來管理手機短信的, 而該類的應用場景并不多,一般是我們發短信的時候才會用到這個API,當然這種短信是 文字短信,對于彩信過于復雜,而且在QQ微信各種社交APP橫行的年代,你會去發1塊錢一條的 彩信嗎?所以本節我們只討論發送普通文字短信! 官方文檔:[SmsManager](http://androiddoc.qiniudn.com/reference/android/telephony/SmsManager.html) ## 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"**/&gt; > > 我們直接調用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") ![](http://www.runoob.com/wp-content/uploads/2015/10/91898880.jpg)...那么復雜,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基礎入門教程——BroadcastReceiver牛刀小試](http://www.runoob.com/w3cnote/android-tutorial-broadcastreceiver.html "4.3.1 BroadcastReceiver牛刀小試") [Android基礎入門教程——4.3.2 BroadcastReceiver庖丁解牛](http://www.runoob.com/w3cnote/android-tutorial-broadcastreceiver-2.html) ## 本節小結: > ![](http://www.runoob.com/wp-content/uploads/2015/10/71083142.jpg)好的,本節介紹了SmsManager發送文字短信的兩種方式~非常簡單~建議還是使用 第一種方案吧,起碼用戶體驗好一點...
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看