2011-12-23 18 views
26

Quiero eliminar algunos SMS de forma automática en mi aplicación de Android. Por lo tanto, tengo un método que hace exactamente lo que quiero que haga. Sin embargo, solo funciona si despliegue la aplicación directamente en mi teléfono desde Eclipse. Luego elimina los SMS entrantes. Sin embargo, no funciona si la aplicación se descarga del mercado. Pero tampoco hay ningún error. ¿Alguien sabe cómo puedo solucionar esto o solo funciona en dispositivos rooteados?Supresión de SMS de Android programáticamente

public void deleteSMS(Context context, String message, String number) { 
    try { 
     mLogger.logInfo("Deleting SMS from inbox"); 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(uriSms, 
      new String[] { "_id", "thread_id", "address", 
       "person", "date", "body" }, null, null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 

       if (message.equals(body) && address.equals(number)) { 
        mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
         Uri.parse("content://sms/" + id), null, null); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     mLogger.logError("Could not delete SMS from inbox: " + e.getMessage()); 
    } 
} 
+0

posible duplicado de [¿Cómo eliminar un SMS de la bandeja de entrada en Android mediante programación?] (Http://stackoverflow.com/questions/419184/how-to-delete-an-sms-from-the-inbox-in -android-programmatically) –

+1

@Marclin ambas preguntas son diferentes. En esta pregunta, se borra geeting SMS si se implementa directamente desde eclipse pero no desde Markrt place –

+0

@SunilKumarSahoo: Tiene razón. El código funciona perfectamente, pero solo si el dispositivo está conectado a la PC, no si se descargó del mercado y estoy tratando de entender por qué. – Florian

Respuesta

24

En realidad, el código en mi post es 100% correcto. El problema es que Android necesita algo de tiempo para almacenar el SMS al recibirlo. Entonces, la solución es simplemente agregar un controlador y retrasar la solicitud de eliminación durante 1 o 2 segundos.

Esto realmente resolvió el problema.

EDITAR (gracias a Maksim Dmitriev):

Por favor, considere que no se puede eliminar mensajes SMS en los dispositivos con Android 4.4.

Además, el sistema ahora solo permite que la aplicación predeterminada escriba datos de mensajes en el proveedor, aunque otras aplicaciones pueden leer en cualquier momento.

http://developer.android.com/about/versions/kitkat.html

Sin excepción se produce si intenta; nada será eliminado. Acabo de probarlo en dos emuladores.

How to send SMS messages programmatically

+0

¿No hay manera de enviar un mensaje y no mostrar en la bandeja de entrada en Android 4.4? –

+0

@Florian ¿resolvió su problema? – Erum

1
private int deleteMessage(Context context, SmsMessage msg) { 
    Uri deleteUri = Uri.parse("content://sms"); 
    int count = 0; 
    Cursor c = context.getContentResolver().query(deleteUri, null, null, 
      null, null); 
    while (c.moveToNext()) { 
     try { 
      // Delete the SMS 
      String pid = c.getString(0); // Get id; 
      String uri = "content://sms/" + pid; 
      count = context.getContentResolver().delete(Uri.parse(uri), 
        null, null); 
     } catch (Exception e) { 
     } 
    } 
    return count; 
} 

use this code............. 

o

getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); 
+0

Si miras más de cerca mi código, verás que esto es exactamente lo que estoy haciendo. Mi código funciona perfectamente si el dispositivo está conectado a la PC con el ADB y si lo despliego directamente. – Florian

7

bueno utilizar este código para eliminar modifique para requisitos particulares SMS 1. Por fecha 2. Por número 3. Por cuerpo

try { 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(
       uriSms, 
       new String[] { "_id", "thread_id", "address", "person", 
         "date", "body" }, "read=0", null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 
       String date = c.getString(3); 
       Log.e("log>>>", 
         "0--->" + c.getString(0) + "1---->" + c.getString(1) 
           + "2---->" + c.getString(2) + "3--->" 
           + c.getString(3) + "4----->" + c.getString(4) 
           + "5---->" + c.getString(5)); 
       Log.e("log>>>", "date" + c.getString(0)); 

       ContentValues values = new ContentValues(); 
       values.put("read", true); 
       getContentResolver().update(Uri.parse("content://sms/"), 
         values, "_id=" + id, null); 

       if (message.equals(body) && address.equals(number)) { 
        // mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
          Uri.parse("content://sms/" + id), "date=?", 
          new String[] { c.getString(4) }); 
        Log.e("log>>>", "Delete success........."); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     Log.e("log>>>", e.toString()); 
    } 
+0

Este es el mejor código en Stackoverflow.com. gracias. –

9

Por favor considere que no se puede eliminar SMS mensajes en dispositivos con Android 4.4.

Además, el sistema ahora solo permite que la aplicación predeterminada escriba datos de mensaje en el proveedor, aunque otras aplicaciones pueden leer en cualquier momento.

http://developer.android.com/about/versions/kitkat.html

Sin excepción se produce si intenta; nada será eliminado. Acabo de probarlo en dos emuladores.

How to send SMS messages programmatically

+0

Dios mío, estaba buscando esas horas. ¡Gracias! –

2

Puede elegir qué aplicación es la aplicación de SMS predeterminada en 4.4+ y si su aplicación se establece como el valor por defecto que será capaz de eliminar SMS también.

2

para hacer la aplicación como la aplicación predeterminada see this.

borrar todo (bandeja de entrada, bandeja de salida, borrador) el SMS.

+0

¿No simplemente 'context.getContentResolver(). Delete (deleteUri, null, null);' también eliminará todos los SMS? –