Poniższy kod pozwoli ci określić, czy inne właściwości oprócz "odczytu" zmieniają się, drukując kolumny i odpowiadające im wartości dla wszystkich wiadomości zwracanych przez dostawcę treści SMS. Na podstawie szybkiego testu, który przeprowadziłem na Nexusie S z Androidem 4.1.2 JZO54K, wydaje się, że niestety nie ma innych wartości, które są modyfikowane, gdy SMS zmienia się z nieprzeczytanego na odczytany.
Istnieje powiązana "widziana" właściwość, która może być jednak interesująca. Zmienia się od 0 do 1, gdy wiadomość SMS została przedstawiona użytkownikowi, ale potencjalnie przed odczytaniem zawartości wiadomości (np. Gdy jest wyświetlana w widoku podsumowania natywnej aplikacji Wiadomości). Związek pomiędzy "widzianym" i "czytanym" można lepiej zrozumieć, przeglądając zastosowania w klasie com.android.mms.data.Conversation.
Stan odczytu można również pobrać przy użyciu metody android.telephony.SmsMessage.getStatusOnIcc(), ale prawdopodobnie uzyskają te same informacje, które są już pobierane od dostawcy treści. Możesz chcieć śledzić zmiany w API SMS, które są Google is indicating will be coming in Android 4.4 (KitKat), ponieważ mogą pomóc w rozwiązaniu problemu, ale mogą również złamać istniejącą implementację, jeśli polega ona na ukrytych interfejsach API/dostawcach treści.
/* for use within a ContentObserver class; print all messages & fields
from the SMS Content Provider when change to mmssms.db is detected;
not optimized for production use */
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Uri uri = Uri.parse("content://sms/inbox");
Cursor c= getContentResolver().query(uri,null,null,null,null);
if(c.moveToFirst()){
for(int i=0;i<c.getCount();i++){
Log.d(TAG,"======= Message ID "+c.getString(c.getColumnIndexOrThrow("_id")).toString()+" =======");
for (int j=0;j<c.getColumnCount();j++){
Log.d(TAG,c.getColumnName(j)+" = "+c.getString(j));
}
}
}
}
}
Co to jest "z native"? Jeśli masz na myśli "z domyślnego klienta SMS", który z ~ 100 z nich masz na myśli? – CommonsWare
Cześć, dziękuję za odpowiedź. Tak, "z natywnego" oznacza "z domyślnego klienta SMS na urządzeniu". Właściwie głównym problemem jest http://stackoverflow.com/questions/19333961/how-to-get-notify-which-sms-got-read-from-nativephone-if-multiple-unread-sms-a Proszę, poprowadź mnie do rozwiązania problem –