Eliminar SMS de Android mediante progtwigción

Quiero eliminar ciertos mensajes de texto automáticamente 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?

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

En realidad, el código en mi publicación 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 en realidad resolvió todo el problema.

EDITAR (gracias a Maksim Dmitriev):

Tenga en cuenta que no puede eliminar mensajes SMS en 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

No se lanzará ninguna excepción si lo intenta; nada será eliminado. Acabo de probarlo en dos emuladores.

Cómo enviar mensajes SMS programáticamente

Tenga en cuenta que no puede eliminar mensajes SMS en 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

No se lanzará ninguna excepción si lo intenta; nada será eliminado. Acabo de probarlo en dos emuladores.

Cómo enviar mensajes SMS programáticamente

oye, utiliza este código para eliminar personalizar 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()); } 

Puede elegir qué aplicación es la aplicación de SMS predeterminada en 4.4+ y si su aplicación está configurada como predeterminada también podrá eliminar SMS.

para hacer que la aplicación como aplicación predeterminada vea esto .

 public void deleteSMS(Context context,int position) { 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) { } } } 

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

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