Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 發送短信 如何做到一條一條的發送,只有在上一條發送成功之後才發送下一條短信

android 發送短信 如何做到一條一條的發送,只有在上一條發送成功之後才發送下一條短信

編輯:關於Android編程

android發送短信截獲上一條發送是否成功,然後再來發送下一條短信

1.問題:在項目中遇到如下要求:待發短信有N條,實現一條一條的發送並在上一條短信發送成功之後再來發送下一條。

for(int i=0;i<3;i++){
sendSMS(10086, text1, i);
}

private void sendSMS(String toAddress, String body, Long id) {


// ---sends an SMS message to another device---
SmsManager sms = SmsManager.getDefault();
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
// create the sentIntent parameter
Intent sentIntent = new Intent(SENT_SMS_ACTION);
sentIntent.putExtra("id", id);
PendingIntent sentPI = PendingIntent.getBroadcast(
ListOutgoingActivity.this, 0, sentIntent, PendingIntent.FLAG_UPDATE_CURRENT);

//你同時發送很多信息的話,會產生很多一樣的PendingIntent,然後Android操作系統會把pendingIntent的數據更新到最新,所以toast的ID是最新的數據,以前的數據會被覆蓋掉。這個可以用來同步數據。


// 如果短信內容超過70個字符 將這條短信拆成多條短信發送出去
if (body.length() > 70) {
ArrayList msgs = sms.divideMessage(body);
for (String msg : msgs) {
sms.sendTextMessage(toAddress, null, msg, sentPI,
null);
}
} else {
System.out.println("body====" + body);
sms.sendTextMessage(toAddress, null, body, sentPI, null);
}
BroadcastReceiver sendMessage = new BroadcastReceiver() {


@Override
public void onReceive(Context context, Intent intent) {
// 判斷短信是否發送成功
switch (getResultCode()) {
case Activity.RESULT_OK:
Long id = intent.getLongExtra("id", -12);

//截取每次發送短信的ID,但是toast的id都是2???,正常情況下應該分別是0,1,2

Toast.makeText(ListOutgoingActivity.this,
id +"發送成功", Toast.LENGTH_SHORT).show();

break;
default:
Toast.makeText(ListOutgoingActivity.this,
"發送失敗", Toast.LENGTH_LONG).show();
break;
}
}
};
registerReceiver(sendMessage, new IntentFilter(
SENT_SMS_ACTION));}




2.解決辦法:現在的解決方法是,收到上一條信息發送成功或者失敗後,在發送下一條數據

int i=0;

sendSMS(10086,test, i) ;

private void sendSMS(String toAddress, String body, Long id) {


// ---sends an SMS message to another device---
SmsManager sms = SmsManager.getDefault();
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
// create the sentIntent parameter
Intent sentIntent = new Intent(SENT_SMS_ACTION);
sentIntent.putExtra("id", id);
PendingIntent sentPI = PendingIntent.getBroadcast(
ListOutgoingActivity.this, 0, sentIntent, PendingIntent.FLAG_UPDATE_CURRENT);

// 如果短信內容超過70個字符 將這條短信拆成多條短信發送出去

if (body.length() > 70) {
ArrayList msgs = sms.divideMessage(body);
for (String msg : msgs) {
sms.sendTextMessage(toAddress, null, msg, sentPI,
null);
}
} else {
System.out.println("body====" + body);
sms.sendTextMessage(toAddress, null, body, sentPI, null);
}
BroadcastReceiver sendMessage = new BroadcastReceiver() {


@Override
public void onReceive(Context context, Intent intent) {
// 判斷短信是否發送成功
switch (getResultCode()) {
case Activity.RESULT_OK:
Long id = intent.getLongExtra("id", -12);
Toast.makeText(ListOutgoingActivity.this,id +"發送成功", Toast.LENGTH_SHORT).show();
i++;

if(i<3){

sendSMS(10086,test,i)

}
break;
default:
Toast.makeText(ListOutgoingActivity.this,
"發送失敗", Toast.LENGTH_LONG).show();
break;
}
}
};
registerReceiver(sendMessage, new IntentFilter(
SENT_SMS_ACTION));}





  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved