Tôi đang phát triển một ứng dụng mà tôi cần gửi hơn 100 tin nhắn. Sau khi đi qua vài chủ đề tôi đã biết có giới hạn về việc gửi tin nhắn như 100 tin nhắn có thể được gửi trong một giờ. Để làm như vậy tôi chia danh sách người nhận của tôi thành các đoạn và trì hoãn thời gian 5 giây giữa mỗi đoạn và chậm trễ 3 giây trong mỗi thư. Sự chậm trễ giữa các phần tăng sau mỗi đoạn và khi nó được đến 100 giây nó sẽ thiết lập lại đến 5 giây. Sau đó nó làm việc OK cho 50 tin nhắn nhưng khi tôi nâng cao danh sách người nhận nó gây ra vấn đề một số tin nhắn đã không đi ở vị trí đầu tiên và hiển thị như là thông báo lỗi trong bản địa.Gửi hơn 50 tin nhắn gây ra sự cố dẫn đến lỗi chung
Có cách nào tiêu chuẩn để đạt được điều này tôi có thể cần phải gửi hơn 100 tin nhắn, làm cách nào tôi có thể gửi nhiều tin nhắn mà không gặp bất kỳ lỗi nào cùng một lúc. Nếu tôi cần phải đặt chậm trễ những gì nên là sự chậm trễ thích hợp giữa các khối hoặc tin nhắn.
Xin cảm ơn trước.
private final int MAX_SMS_IN_ONE_TIME = 10;
private final int DELAY_BETWEEN_CHUNKS = 5000;
public void sendMessage(arguments){
// Send long messages in chunk of 20 messages and put gap of increasing 5 seconds till 50 seconds and then reset.
final Iterator iterator = messageChunks.iterator();
new Thread(new Runnable() {
@Override
public void run(){
int interval =1;
while (iterator.hasNext()) {
for (final Contact contact :
(List<Contact>) iterator.next()) {
sendSMS(body, contact.getmMobileNumbers().get(0));
App.trackEvent("Message", "Sent", "Messages from our sms app");
}
}
try {
Log.i("chunk", "chunk # " + interval + " delay is " + DELAY_BETWEEN_CHUNKS);
Thread.sleep(DELAY_BETWEEN_CHUNKS * interval);
interval++;
if (interval == 10) {
interval = 1;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
public void sendSMS(final String message, final String phoneNo) {
try {
String SENT = "com.ebryx.smscustommessagegeneration"+""+System.currentTimeMillis()+""+((int)this.getmMessageId());
Intent intentMessageASendStatus = new Intent(SENT);
final PendingIntent pi = PendingIntent.getBroadcast(App.getContext(), ((int)this.getmMessageId()),
intentMessageASendStatus, PendingIntent.FLAG_CANCEL_CURRENT);
final ArrayList<PendingIntent> sentPI = new ArrayList<PendingIntent>(){{add(pi);}};
App.getContext().registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Log.i("tag","sent successfully ");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.i("tag","Generic Failure");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.i("tag","No service failure");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.i("tag","Airplane mode failure");
break;
}
}
}, new IntentFilter(SENT));
final SmsManager smsManager = SmsManager.getDefault();
final ArrayList<String> parts = smsManager.divideMessage(message);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
smsManager.sendMultipartTextMessage(phoneNo, null, parts, sentPI, null);
}}, 3000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
gì được thông báo lỗi bạn đang nhìn thấy? –
@ScottNewson, tôi không thấy bất kỳ thông báo lỗi nào nhưng một vài thư không đi do lỗi chung. –
Tại sao bạn tăng thời gian gửi tin nhắn? –