Eliminar SMS en Android 1.5

Hay muchas preguntas al respecto, no hay respuestas que funcionen en mi aplicación 🙁

Necesito quitar SMS de un receptor, incluso si el usuario puede verlo, pero debe ser quitado programaticamente.

¿Cómo puedo hacerlo?

El más adecuado que he utilizado fue el siguiente, pero no funciona 🙁

context.getContentResolver().delete( deleteUri, "address=? and date=?", new String[] { msg.getOriginatingAddress(), String.valueOf(msg.getTimestampMillis()) }); 

Después de refactorizar mi código encontré que la siguiente solución funciona:

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

Gracias a todos por su ayuda!

Ps si este código es útil para alguien – recuerda que catch (Exception) no es bueno.

Simplemente utilice este código simple en su receptor de difusión.

 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); 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[] { <your date>}); Log.e("log>>>", "Delete success........."); } } while (c.moveToNext()); } } catch (Exception e) { Log.e("log>>>", e.toString()); } 

¿Cuál es el valor de deleteUri ?

¿Está seguro de que el SMS se ha escrito en el almacenamiento local antes de intentar eliminarlo? Si está manejando la transmisión SMS_RECEIVED , no está garantizado que el SMS haya sido procesado por la aplicación nativa de SMS …

También, notaría que la API del proveedor de contenido de SMS no está públicamente documentada por Android y podría estar sujeta a cambios en el futuro. Pero si sólo apunta a Android 1.5 (o dispositivos actuales), puede que esté bien.

Este enlace puede ser útil

http://blog.chinaunix.net/u/9577/showart_1850111.html

No lo he implementado completamente pero lo que he implementado funciona

Tenga en cuenta que no está totalmente documentado y es probable que cambie en futuras versiones de Android

EDITAR:

Aquí está la forma en que implementé el código yo mismo:

 String url = "content://sms/"; Uri uri = Uri.parse(url); getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler)); Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = getContentResolver().query(uriSms, null,null,null,null); Log.d("COUNT", "Inbox count : " + c.getCount()); } class MyContentObserver extends ContentObserver { public MyContentObserver(Handler handler) { super(handler); } @Override public boolean deliverSelfNotifications() { return false; } @Override public void onChange(boolean arg0) { super.onChange(arg0); Log.v("SMS", "Notification on SMS observer"); Message msg = new Message(); msg.obj = "xxxxxxxxxx"; handler.sendMessage(msg); Uri uriSMSURI = Uri.parse("content://sms/"); Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null); cur.moveToNext(); String protocol = cur.getString(cur.getColumnIndex("protocol")); if(protocol == null){ Log.d("SMS", "SMS SEND"); int threadId = cur.getInt(cur.getColumnIndex("thread_id")); Log.d("SMS", "SMS SEND ID = " + threadId); getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null); } else{ Log.d("SMS", "SMS RECIEVE"); int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id")); getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); } } } 

El código escucha los cambios en el proveedor de contenido de SMS.

Esta es la línea que le interesaría si desea eliminar un SMS

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

Usted tiene que suprimir una conversación entera para suprimir el SMS, no he podido apenas suprimir el último mensaje de una conversación

Usar esto y ser chicos felices

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.telephony.SmsMessage; import android.widget.Toast; import android.net.Uri; public class SmsReceiver extends BroadcastReceiver { private Handler mHandler = new Handler(); private SmsMessage[] msgs; private Context con; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); msgs = null; String str = ""; if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int i=0; i<msgs.length; i++) { msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); str += "SMS from " + msgs[i].getOriginatingAddress(); str += ":"; str += msgs[i].getMessageBody().toString(); str += "\n"; } con = context; mHandler.postDelayed(new Runnable() { @Override public void run() { deleteSMS(); } }, 5000); Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } } private void deleteSMS() { try { for (int i=0; i<msgs.length; i++) { con.getContentResolver().delete(Uri.parse("content://sms"), "address=? and date=?", new String[] {msgs[i].getOriginatingAddress(), String.valueOf(msgs[i].getTimestampMillis())}); } } catch (Exception ex) { Toast.makeText(con, "Error: " + ex, Toast.LENGTH_SHORT).show(); } } } 
  • ¿Cómo puede enviar sms en android en doble SIM?
  • La intención de la aplicación sms no funciona en android 3.0 y superior
  • SMS tipo de Android 0
  • ¿Cómo acceder al almacenamiento de SMS en Android?
  • Android: determinar por qué no se pudo enviar SMS
  • ¿Cómo obtener el informe de entrega de cada SMS enviado en bucle Android?
  • Android: ¿Cómo enviar unicode sms programatically y recibirlo en el otro lado correctamente?
  • Lanzar la aplicación android cuando se pulsa un enlace en SMS
  • Listín de SMS de Android para un número específico
  • Android SmsProvider, ¿qué significa ICC?
  • enviar SMS Intent en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.