2011-12-26 10 views

risposta

23

Questo potrebbe aiutare:

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

È tutto letto msg nella casella o in un particolare – Prasad

+1

No, solo un messaggio particolare con _id = SmsMessageId –

+0

Il risultato di ritorno della query di aggiornamento è 0. Qual è la ragione di questo? –

0

Non credo che ci sia alcun supporto ufficiale per questo, ma questa domanda fornisce un metodo di farlo (non hanno provato però): Mark MMS as read programmatically

+0

idea sbagliata, sms che prendo in OnReceive non è in "tenore: // SMS" –

+0

@ Andrew-Dovrebbe essere: contenuti "content // sms/casella di posta" .. –

6

Una risposta è stata data qui: 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); 

dove "_id" è l'ID del messaggio

cura, grazie NilayOnAndroid!

+0

Dovrebbe essere" : // sms/inbox ".. –

8

Dal Android 4.4 KitKat l'unica applicazione in grado di modificare i dati sms - SMS-app che è stata impostata come predefinita

solo l'applicazione che riceve la trasmissione SMS_DELIVER_ACTION (l'app SMS predefinita specificata dall'utente) è in grado di scrivere sul provider SMS definito da android.provider.Telografia classe e sottoclassi

Maggiori informazioni possono essere trovate qui: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html

0

ho fatto un workarround versioni più recenti che KitKat, dalla risposta here: se ci sono messaggi da leggere, quando l'utente lascia l'applicazione, avviare applicazione SMS con il numero per il quale voglio messaggi per contrassegnare la lettura. Questo segnerà automaticamente tutti i messaggi come letti.

@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; 
    } 
} 
Problemi correlati