我正在开发一个 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();
}
}
}
}
}
为什么会这样?我该如何处理长消息?
答案 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();
}
}
}
}
}
希望这可以帮助其他人在未来遇到同样的问题。