发送导致问题的50多条消息会导致一般性故障

时间:2017-08-22 13:16:26

标签: android sms smsmanager

我正在开发一个应用程序,我需要发送100多条消息。经过几个线程后我才知道发送邮件有限制,可以在一小时内发送100封邮件。为此,我将收件人列表分成块,并在每个块之间放置5秒的延迟,并在每条消息中放置3秒的延迟。块之间的延迟在每个块之后增加,当它达到100秒时,它将重置为5秒。之后它可以正常运行50条消息,但是当我提出收件人列表时会导致问题,一些消息没有在第一时间出现并显示为本机的错误消息。

有没有任何标准的方法来实现这一点我可能需要发送100多条消息,我怎么能一次发送多条消息而没有任何失败。如果我需要延迟应该是块或消息之间的适当延迟。

提前致谢。

var a = 9007199254740992;
console.log(a);      // 9007199254740992
var b = a + 1;
console.log(b);      // still 9007199254740992
console.log(a == b); // true

2 个答案:

答案 0 :(得分:4)

你应该使用两个具有未决意图的广播接收器进行SENT和DELIVER。

消息传递后,您必须添加回调机制以通知msg已经发送并且stat发送新消息。此通话应同步

  1. 创建一个HashMap,并根据我们在下面的传送广播接收器中获得的传送状态逐个发送到下面的方法。

        /**
         * Sends an SMS message to another device
         * 
         * @param phoneNumber Number to which msg send
         * @param message Text message
         */
    private void sendSMS(String phoneNumber, String message) {
        // Intent Filter Tags for SMS SEND and DELIVER
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";
    // STEP-1___
        // SEND PendingIntent
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
                SENT), 0);
    
        // DELIVER PendingIntent
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);
    // STEP-2___
        // SEND BroadcastReceiver
        BroadcastReceiver sendSMS = new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS sent",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(), "Generic failure",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getBaseContext(), "No service",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(), "Null PDU",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getBaseContext(), "Radio off",                            Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        };
    
        // DELIVERY BroadcastReceiver
        BroadcastReceiver deliverSMS = new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                     // TODO : notify from here to send new message.
                     // Add callback mechanism 
                    Toast.makeText(getBaseContext(), "SMS delivered",
                            Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    Toast.makeText(getBaseContext(), "SMS not delivered",
                            Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        };
    // STEP-3___
        // ---Notify when the SMS has been sent---
        registerReceiver(sendSMS, new IntentFilter(SENT));
    
        // ---Notify when the SMS has been delivered---
        registerReceiver(deliverSMS, new IntentFilter(DELIVERED));
    
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
     }
    }
    
  2. 您还可以将HashMap中的元素移除为短信已发送 这有助于您跟踪成功传递的邮件数量。

答案 1 :(得分:0)

似乎没有关于短信发送限制的官方文档,我可以找到以及以下网站。

  

Unfortunately似乎没有公开文件   谷歌的Android开发团队就此问题。

这是2017年5月17日

我能找到的短信限制的唯一数字来自Commonsware的网站:

  

<强> SMS Sending Limitations
  在Android 1.x和2.x设备上运行的应用仅限于每小时发送100条短信   用户开始收到每条SMS消息请求的提示以进行确认   他们确实希望发送它。

     

在Android 4.x设备上运行的应用程序,现在限制为30条短信   30分钟内的消息...... / ...

似乎没有办法增加限制without rooting手机。您需要更改以下设置的位置。以下内容允许每180000ms = 30分钟发送1000条短信。

SMS_OUTGOING_CHECK_MAX_COUNT 1000
SMS_OUTGOING_CHECK_INTERVAL_MS 1800000

通常(令人沮丧的)Android问题在各种设备上具有不同的性能也同样适用。一部手机可能与另一部手机处于不同的水平。

该公司已确定某些手机产品的最大SMS容量。 SMS sending limits with FrontlineSync and Android。他们还建议可能需要根据手机来增加限制。

相关资源:

Check android package SMS limit?

is there a limit to the number of numbers to send an SMS?

Android Java: How To Send SMS & Receive SMS & Get SMS Messages日期为2017年8月30日。