我想在我的应用程序中观察sent
和received
短信。接收短信工作正常,但发送短信时出现问题。当用户同时一个接一个地发送多个SMS(组SMS)时,会跳过一些SMS(onChange()中没有日志)。此外,onChange()
被调用两次,因为观察到的光标正在被更新两次。所以,谁能告诉我这里的问题是什么。如何在发送的短信中获取所有已发送的短信详细信息。以下是我观察发送和接收短信的代码。
onChange()
方法实现,
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(getClass().getSimpleName(), "onChanged called");
Cursor cursor = mContext.getContentResolver().query(Uri
.parse("content://sms"), null, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
Log.d("Message Body and ID ",cursor.getString(cursor
.getColumnIndex("body")));
}
}
}
此外,我提到了一些链接/答案,这些链接/答案坚持使用deliverSelfNotifications()
将true返回到被调用两次的受限onChange()
,但这也无效。它仍然会被调用两次。
@Override
public boolean deliverSelfNotifications() {
return true;
}
当我从模拟器/设备发送4条消息时,下面是我的Logcat输出 Aaaa,Bbbb,Cccc,Dddd,它只给了我最后两条消息的详细信息,前两条消息被跳过了。
03-12 18:51:19.809: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:21.458: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:22.648: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:25.508: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:28.568: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:28.812: WARN/dalvikvm(103): JNI: pin count on array 0x40051200 ([C) is now 11
03-12 18:51:28.841: WARN/dalvikvm(103): JNI: pin count on array 0x40051200 ([C) is now 11
03-12 18:51:28.841: WARN/dalvikvm(103): JNI: pin count on array 0x40051200 ([C) is now 11
03-12 18:51:28.841: WARN/dalvikvm(103): JNI: pin count on array 0x40051200 ([C) is now 11
03-12 18:51:30.348: DEBUG/dalvikvm(103): GREF has increased to 601
03-12 18:51:31.798: DEBUG/dalvikvm(189): GREF has increased to 501
03-12 18:51:32.529: DEBUG/dalvikvm(103): GC freed 8501 objects / 577704 bytes in 447ms
03-12 18:51:32.998: DEBUG/dalvikvm(189): GC freed 13158 objects / 515104 bytes in 324ms
03-12 18:51:33.538: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:33.768: WARN/KeyCharacterMap(189): No keyboard for id 0
03-12 18:51:33.778: WARN/KeyCharacterMap(189): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
03-12 18:51:35.194: DEBUG/Message Body and ID(1354): Cccc
03-12 18:51:35.548: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:37.658: DEBUG/MyContentObserver(1354): onChanged called
03-12 18:51:38.308: DEBUG/Message Body and ID(1354): Ddd
正如您所看到的,我只在logcat输出中获得了Cccc和Dddd。那么,任何人都可以给我解决方案/原因,为什么会发生这种情况,我还能做些什么来获得前两条消息。
答案 0 :(得分:0)
根据您的日志,似乎onChange
被调用8次,每SMS
次调用两次。前4次未达到"Message Body and ID"
行,因此光标为null
或cursor.moveToFirst()
返回false
。你能检查一下是哪种情况吗?
在任何一种情况下,这听起来像是一个时间问题,当您调用onChange
并且sms db
不是最新的(可用?)时会出现同步问题。
出于测试目的,您可以sleep
几秒钟检查mContext.getContentResolver().query(Uri.parse("content://sms"), null, null, null, null);
如果您等待的话,是否会返回任何不同的内容。
答案 1 :(得分:0)
尝试在selfChange
onChange
像这样
if(selfChange)
{
// paste your code here
}
else
{
return;
}