2011-12-26 9 views
11

Puedo capturar sms, puedo ver el teléfono del remitente, el cuerpo, puedo abortarBroadcast si no me gusta este sms, pero no sé cómo marcar este sms como leer, ese usuario puede leer en el cuadro más tarde. ¿Alguna idea de cómo puedo hacer esto?Android: cómo marcar sms como leído enRecibir

Respuesta

23

Esto podría ayudarle a:

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

¿Es esto leer todos los mensajes en el recuadro o en uno particular – Prasad

+1

No, solo un mensaje en particular con _id = SmsMessageId –

+0

El resultado de la consulta de actualización es 0. Cuál es la razón detrás de esto ? –

0

No creo que haya ningún apoyo oficial para esto, pero esta pregunta proporciona un método de hacerlo (no lo he probado sin embargo): Mark MMS as read programmatically

+0

idea equivocada, sms que capto en OnReceive no está en "contenido: // SMS" –

+0

@ Andrew-Debe ser "contenido: // SMS/bandeja de entrada" .. –

6

Una respuesta se ha dado aquí: 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); 

donde "_id" es el ID del mensaje

Editado, gracias NilayOnAndroid!

+0

Debe ser contenido" : // sms/inbox ".. –

8

Dado que Android 4.4 KitKat la única aplicación puede modificar los datos de SMS - SMS-aplicación que se establece de forma predeterminada

únicamente la aplicación que recibe la emisión SMS_DELIVER_ACTION (la aplicación de SMS predeterminada por el usuario) puede escribir al proveedor de SMS definido por la clase android.provider.Telephony y las subclases

Más información se puede encontrar aquí: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html

0

Hice un workarround para las versiones más nuevas que KitKat, de la respuesta here: si hay mensajes para leer, cuando el usuario abandona la aplicación, inicie la aplicación de SMS con el número que yo quiero mensajes para marcar leer. Esto marcará automáticamente todos los mensajes como leídos.

@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; 
    } 
} 
Cuestiones relacionadas