我正在开发一个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次所以基本上我认为问题仍然是接收器,它正在获取长信息但多次显示