由于160个字符限制,Android发送短信失败,但作为multipart发送

时间:2017-08-29 13:04:10

标签: android sms smsmanager

我的一些客户(约100人)报告该应用未发送短信。所以我在应用程序中添加了调试日志,并出现以下错误:

(1) RESULT_ERROR_GENERIC_FAILURE (Generic failure cause)

根据文档,错误的来源无法识别,可能是设备没有网络,airplaine模式已开启等。

这就是发送短信的方式:

   private void sendSMS(@NonNull String phoneNumber, @NonNull String message, @Nullable PendingIntent pendingIntentSent, @Nullable PendingIntent pendingIntentDelivered) {
        SmsManager smsManager = null;

        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                int smsId = SmsManager.getDefaultSmsSubscriptionId();
                smsManager = SmsManager.getSmsManagerForSubscriptionId(smsId);
            }
            else {
                smsManager = SmsManager.getDefault();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        if (smsManager == null)
            smsManager = SmsManager.getDefault();

        ArrayList<String> messageDivided = smsManager.divideMessage(message);
        if (messageDivided.size() == 1) {
            smsManager.sendTextMessage(phoneNumber, null, message, pendingIntentSent, pendingIntentDelivered)
        }
        else {
            ArrayList<PendingIntent> piSentList = null;
            ArrayList<PendingIntent> piDeliveredList = null;

            if (pendingIntentSent != null) {
                piSentList = new ArrayList<>();
            }

            if (pendingIntentDelivered != null) {
                piDeliveredList = new ArrayList<>();
            }

            for (int i = 0; i < messageDivided.size(); i++) {
                if (pendingIntentSent != null)
                    piSentList.add(pendingIntentSent);

                if (pendingIntentDelivered != null)
                    piDeliveredList.add(pendingIntentDelivered);
            }

            smsManager.sendMultipartTextMessage(phoneNumber, null, messageDivided, piSentList, piDeliveredList);
        }
    }

我发现如果邮件长度小于160个字符,错误就会消失,并且可以成功发送短信。但是,这是部分修复,因为我不希望我的用户限制SMS。

SMS长度限制也与载体不同。

US Cellular

  

每条短信限制为150个字符,包括空格和   标点。如果消息超过150个字符,则余数   将丢失,导致收到不完整的消息。注意:   有些手机可能有较小的字符限制。

其他网络运营商有不同的短信长度,140或160。

0 个答案:

没有答案