接收方接收长短信但多次显示

时间:2016-05-19 10:44:05

标签: android listview broadcastreceiver sms

我正在开发一个SMS应用程序,我正在接收短信。现在第一个问题是当接收到长短信时,接收器将其分成不同的部分。即它总是显示最后的短信而不是完整的短信。但后来我搜索了很多,并发现我需要附加完整的短信,以便所有部分都连接起来。但是现在出现了另一个问题。当收到短信时我会在listview中显示它。在收到长短信后,这个附加解决方案然后listview显示多个项目。即如果sms很长,可以说它被计为3个Sms,那么listview会在listview中显示第一个sms,然后它也会保存短信的第二部分,最后它会保存完整的短信。如何在listview中显示完整的短信? 这是我接收短信的代码:

if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
  Bundle bundle = intent.getExtras();
  SmsMessage[] msgs = null;
  String msg_from;
  String msgBody = "";
  if (bundle != null) {
    try {
      Object[] pdus = (Object[]) bundle.get("pdus");
      msgs = new SmsMessage[pdus.length];
      for (int i = 0; i < msgs.length; i++) {
        msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        msg_from = msgs[i].getOriginatingAddress();

         msgBody += msgs[i].getMessageBody();

        msg_from = Utilities.extractNumbers(msg_from);
        Long dateLong = msgs[i].getTimestampMillis();
        String msgDate = dateLong.toString();

如你所见:

msgBody += msgs[i].getMessageBody();

我将短信的所有部分合并为一个。但我相信问题仍在这里请帮助

收到消息时,我正在检查是否来自联系人。如果没有,则采用这种方法:

screenMessage(context, msg_from, msg_from, msgBody, msgDate);

这个方法正在做什么,它将它保存在数据库中,然后我显示从db到listview的数据。

public void screenMessage(Context context, String msg_from, String msgSender,
  String msgBody, String msgDate) {
DBsms smsdb = new DBsms(context);
SQLiteDatabase dbw = smsdb.getWritableDatabase();


String query_insertSMS = "insert into " + "sms" + "(" + "contactnumber" + "," + "contactname" + "," + "message"
    + "," + "date" + ") values (\"" + msg_from.toString() + "\", \"" + msgSender + "\",\"" + msgBody
    + "\",\"" + msgDate + "\")";

dbw.execSQL(query_insertSMS);
smsdb.close();
dbw.close();
abortBroadcast();

}

还有一件事我在检查后也会检查

log.e("key",msgBody);

但是也显示3次计数短信到3次所以基本上我认为问题仍然是接收器,它正在获取长信息但多次显示

0 个答案:

没有答案