Mogę złapać sms, widzę telefon nadawcy, ciało, mogę przerwać transmisję, jeśli nie podoba mi się ten sms, ale nie wiem jak oznaczyć ten sms jako przeczytać, że użytkownik może później odczytać w polu. Jakieś pomysły, jak mogę to zrobić?Android: jak oznaczyć sms jako przeczytany onReceive
Odpowiedz
To może pomóc:
private void markMessageRead(Context context, String number, String body) {
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
try{
while (cursor.moveToNext()) {
if ((cursor.getString(cursor.getColumnIndex("address")).equals(number)) && (cursor.getInt(cursor.getColumnIndex("read")) == 0)) {
if (cursor.getString(cursor.getColumnIndex("body")).startsWith(body)) {
String SmsMessageId = cursor.getString(cursor.getColumnIndex("_id"));
ContentValues values = new ContentValues();
values.put("read", true);
context.getContentResolver().update(Uri.parse("content://sms/inbox"), values, "_id=" + SmsMessageId, null);
return;
}
}
}
}catch(Exception e)
{
Log.e("Mark Read", "Error in Read: "+e.toString());
}
}
Nie sądzę, że istnieje jakiekolwiek oficjalne wsparcie dla tego, ale to pytanie jest sposób to robi (nie próbował go jednak): Mark MMS as read programmatically
zły pomysł, sms, że złapię w onReceive nie jest "zawartość: // sms" –
@ Andrew-Należy "content: // sms/Skrzynka" .. –
Odpowiedź została podana tutaj: Set sms as read in Android
ContentValues values = new ContentValues();
values.put("read",true);
getContentResolver().update(Uri.parse("content://sms/inbox"),values,
"_id="+SmsMessageId, null);
gdzie "_id" jest przesłanie ID sprzedawcy
edytowany, dzięki NilayOnAndroid!
Powinno być „treści : // sms/inbox ".. –
Ponieważ Android 4.4 KitKat jedynym app może modyfikować dane SMS - SMS-app, który został ustawiony jako domyślny
tylko aplikację, która odbiera transmisję SMS_DELIVER_ACTION (określona przez użytkownika domyślna aplikacja do obsługi SMS-ów) może pisać do dostawcy SMS zdefiniowanego przez android.provider.Telefonia i podklasy
Więcej informacji można znaleźć tutaj: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html
Zrobiłem workarround dla wersji nowszych że KitKat, z odpowiedzią here: czy istnieją komunikaty mają być czytane, gdy użytkownik opuści aplikację, uruchom aplikację SMS z numeru, dla którego chcę wiadomości oznaczające przeczytane. Spowoduje to automatyczne oznaczenie wszystkich wiadomości jako przeczytanych.
@Override
public void onBackPressed() {
if (toBeRead) {
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", smsNumber);
//smsIntent.putExtra("sms_body","Body of Message");
startActivity(smsIntent);
toBeRead = false;
}
}
Czy to jest przeczytane wszystkie wiadomości w polu lub konkretnym – Prasad
Nie, tylko konkretna wiadomość z _id = SmsMessageId –
Wynik zwracany przez zapytanie aktualizacji wynosi 0. Jaki jest tego powód? –