私のアプリケーションでsent
とreceived
SMSを観察したいと思います。 SMSの受信は問題なく動作しますが、SMSの送信に問題があります。ユーザーが複数のSMSを次々に送信すると(グループSMS)、SMSの一部がスキップされます(onChange()内のログはありません)。また、onChange()
は、観測されたカーソルが2回更新されているため、2回呼び出されています。だから誰も私にここで何が問題か教えてもらえますか?送信されたすべてのSMSの詳細を送信済みSMSで取得するにはどうすればよいですか。以下は、送受信されたSMSを観察するためのコードです。ContentObserverのonChange()がいくつかのSMS送信をスキップします。グループSMS
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")));
}
}
}
はまた、私はいくつかのリンク/二回呼び出されている制限onChange()
にtrueを返しdeliverSelfNotifications()
を使用して主張した答えを参照さが、これも機能していません。まだ2回呼び出されます。以下は
@Override
public boolean deliverSelfNotifications() {
return true;
}
私はエミュレータ/デバイス から4のメッセージを送ったときに、AAAA、BBBB、CCCC、DDDD、それは私だけ、最後の二つのメッセージの詳細を与え、最初の二つはスキップされました、私のLogcat出力です。
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しか持っていません。だから、誰も私に解決策/理由を教えてもらうことができます。なぜこのようなことが起きていますか、最初の2つのメッセージを得るために何ができるでしょうか。
@Cancerよう
onChange
にブール
selfChange
を使用して試してみて、そのカーソルがnullになることはありませんチェックし、それは常に 'cursor.moveToFirst()'のためにtrueを返します。 –