2011-12-26 2 views

Répondre

23

Cela pourrait vous aider:

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

Est-ce que cela lit tous les msgs dans la boîte ou un particulier – Prasad

+1

Non, juste un message particulier avec _id = SmsMessageId –

+0

Le résultat de la requête de mise à jour est 0. Quelle est la raison derrière cela ? –

0

Je ne pense pas qu'il y ait un soutien officiel, mais cette question fournit une méthode de le faire (ne l'ont pas essayé bien): Mark MMS as read programmatically

+0

mauvaise idée, sms que je surprends dans OnReceive est pas "content: // sms" –

+0

@ Andrew-Il devrait être "content: // sms/boîte de réception" .. –

6

Une réponse a été donnée ici: 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); 

où "_id" est l'ID

Modifié, merci NilayOnAndroid du message!

+0

Il devrait être « contenu : // sms/inbox ".. –

8

Depuis Android 4.4 KitKat la seule application peut modifier les données sms - SMS-application qui a été définie par défaut

que l'application qui reçoit la diffusion SMS_DELIVER_ACTION (l'application SMS par défaut spécifiée par l'utilisateur) est capable d'écrire dans le fournisseur SMS défini par android.provider.Téléphone classe et sous-classes

Plus d'informations peuvent être trouvées ici: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html

0

Je l'ai fait une workarround pour les versions plus récentes qui KitKat, de réponse here: s'il y a des messages à lire, lorsque l'utilisateur quitte l'application, commencez l'application SMS avec le numéro que je veux messages à marquer lus. Cela marquera automatiquement tous les messages lus.

@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; 
    } 
} 
Questions connexes