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! |