Android String.contains 最多只能使用 154 个字符

时间:2021-02-08 16:22:57

标签: java android

我正在开发一个 Android 应用程序,该应用程序使用广播接收器来提取和显示某些文本消息。这些消息总是很长,broadcastReceiver 无法获取它们。在逐渐将测试消息越来越小之后,我发现上限大约是 154 个字符(给或取几个)。

我的代码是

public class SmsReceiver extends BroadcastReceiver {

    public static final String EXTRA_MESSAGE = "com.example.alert10.MESSAGE";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
            String smsSender = "";
            String smsBody = "";
            for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {
                smsSender = smsMessage.getOriginatingAddress();
                smsBody = smsMessage.getMessageBody();
            }

            if (smsSender.equals("+447800966043")) {
                if (smsBody.contains("Attendance Request")) { 
                    Intent secondintent = new Intent(context, MainActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putString(EXTRA_MESSAGE, smsBody);
                    bundle.putInt("VIS", 1);
                    secondintent.putExtras(bundle);
                    secondintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(secondintent);
                    abortBroadcast();
                }
            }
        }
    }
}

为什么会这样?我该如何处理长消息?

1 个答案:

答案 0 :(得分:0)

多亏了 Gene,我才意识到(我已经忘记了)很长的 SMS 消息实际上是多条消息连接在一起,这就是破坏我的应用程序的原因。因此,经过一番谷歌搜索,特别是在 Android - receiving long SMS (multipart) 中找到 om252345 的答案后,我想出了这个修改后的代码:

public class SmsReceiver extends BroadcastReceiver {

    public static final String EXTRA_MESSAGE = "com.example.alert10.MESSAGE";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
            String smsSender = "";
            String smsBody = "";
            for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {
                smsSender = smsMessage.getOriginatingAddress();

                Bundle bundle = intent.getExtras();
                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < pdus.length; i++) {
                    messages[i] =
                            SmsMessage.createFromPdu((byte[]) pdus[i]);
                }

                SmsMessage sms = messages[0];
                try {
                    if (messages.length == 1 || sms.isReplace()) {
                        smsBody = sms.getDisplayMessageBody();
                    } else {
                        StringBuilder bodyText = new StringBuilder();
                        for (int i = 0; i < messages.length; i++) {
                            bodyText.append(messages[i].getMessageBody());
                        }
                        smsBody = bodyText.toString();
                    }
                } catch (Exception e) {
                    Toast.makeText(context, "App has failed to collect Alert",
                            Toast.LENGTH_LONG).show();
                }
            }

            if (smsSender.equals("+447800966043")) {
                if (smsBody.contains("Attendance Request")) {
                    Intent secondintent = new Intent(context, MainActivity.class);
                    Bundle bundle = new Bundle();
                    bundle.putString(EXTRA_MESSAGE, smsBody);
                    bundle.putInt("VIS", 1);
                    secondintent.putExtras(bundle);
                    secondintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(secondintent);
                    abortBroadcast();
                }
            }
        }
    }
}

希望这可以帮助其他人在未来遇到同样的问题。

相关问题