編輯:關於Android編程
本節帶來的是Android中的SmsManager(短息管理器),見名知意,就是用來管理手機短信的,
而該類的應用場景並不多,一般是我們發短信的時候才會用到這個API,當然這種短信是
文字短信,對於彩信過於復雜,而且在QQ微信各種社交APP橫行的年代,你會去發1塊錢一條的
彩信嗎?所以本節我們只討論發送普通文字短信!
官方文檔:SmsManager
就是把寫好的收信人和內容發送到系統的發送短信的界面,用戶驗證收件人內容是否真正確再點擊發送!
說白了就是調用系統發短信的窗口,這樣做有一定的好處:
這樣發短信,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);
}
}
這個就需要發短信的權限啦
destinationAddress:收信人的電話號碼 scAddress:短信中心的號碼,null的話使用當前默認的短信服務中心 text:短信內容 sentIntent:短信發送狀態的信息:(發送狀態的Intent)
<uses-permission android:name=”android.permission.SEND_SMS”/>
我們直接調用SmsManager為我們提供的短信接口發送短信:
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliverIntent);
參數依次是:
如果不為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 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));
本節引言: 本節我們來把剩下的四種Drawable也學完,他們分別是: LayerDrawable,TransitionDrawable,Leve
Android WebView 1.首先修改activity.xml中的代碼:2.然後MainActivity中的代碼:3.最後設置權限:<uses-permiss
回調介紹所謂回調,就是客戶程序Client調用服務程序Service中的某個方法A,然後Service又在某個時候反過來調用Client中的某個方法B,對於Client來
如何使用ES文件浏覽器的遠程管理。ES文件浏覽器是在android手機上常見的手機文件管理器,在基本的文件功能之上,它還支持開啟其他設備通過WiFi遠程連接