我想观察sent
和received
短信在我的应用。接收短信工作正常,但发送短信时有问题。当用户同时发送多个SMS(群SMS)时,会跳过一些SMS(onChange()中没有日志)。另外,当观察到的光标正在更新两次时,onChange()
会被调用两次。那么,有谁能告诉我这里有什么问题。我怎样才能在发送的短信中获得所有发送的短信详细信息。下面是我观察发送和接收短信的代码。ContentObserver的的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")));
}
}
}
而且我refered一些链接/使用deliverSelfNotifications()
返回true受限onChange()
被称为两倍坚持的答案,但是这也不能正常工作。它仍然被调用两次。
@Override
public boolean deliverSelfNotifications() {
return true;
}
下面是我的logcat输出,当我发出4消息从模拟器/设备 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。所以,任何人都可以给我解决方案/为什么会发生这种情况,我能做些什么来获得前两条消息。
@Cancer我登录并检查光标永远不能为null,它总是'cursor.moveToFirst()'返回true。 – 2012-03-13 05:21:00