2011-12-26 7 views

Odpowiedz

23

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()); 
     } 
} 
+0

Czy to jest przeczytane wszystkie wiadomości w polu lub konkretnym – Prasad

+1

Nie, tylko konkretna wiadomość z _id = SmsMessageId –

+0

Wynik zwracany przez zapytanie aktualizacji wynosi 0. Jaki jest tego powód? –

0

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

+0

zły pomysł, sms, że złapię w onReceive nie jest "zawartość: // sms" –

+0

@ Andrew-Należy "content: // sms/Skrzynka" .. –

6

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!

+0

Powinno być „treści : // sms/inbox ".. –

8

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

0

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; 
    } 
}