Entonces, tuve una obra de teatro, y es es posible eliminar un SMS recibido. Por desgracia, no todo es un camino de rosas :(
Tengo un receptor que recoge los mensajes SMS entrantes. Ahora, la forma en que funciona el enrutamiento de entrada de Android SMS es que el trozo de código responsable de la decodificación de los mensajes envía un broadcast (se utiliza el método sendBroadcast()
-. que por desgracia no es la versión que le permite simplemente llamar abortBroadcast()
) cada vez que llega un mensaje
Mi receptor puede o no puede ser llamado antes de que el receptor de los sistemas SMS, y en todo caso la emisión recibida no tiene propiedad que podría reflejar la columna _id
en la tabla SMS.
Sin embargo, al no ser tan fácil de detener, me publico (a través de un controlador) un mensaje retrasado con SmsMessage como el objeto adjunto. (Supongo que se puede publicar usted mismo un Ejecutable también ...)
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
El retraso está ahí para asegurarse de que en el momento en que el mensaje llega a todos los receptores de radiodifusión se han terminado sus cosas y el mensaje será segura instalado en la mesa SMS.
Cuando se recibe el mensaje (o Ejecutable) que aquí es lo que hago:
case MSG_DELETE_SMS:
Uri deleteUri = Uri.parse("content://sms");
SmsMessage msg = (SmsMessage)message.obj;
getContentResolver().delete(deleteUri, "address=? and date=?", new String[] {msg.getOriginatingAddress(), String.valueOf(msg.getTimestampMillis())});
utilizo la dirección de origen y el campo de marca de tiempo para asegurar una probabilidad muy alta de borrar sólo el mensaje Estoy interesado en. Si quisiera ser aún más paranoico, podría incluir el contenido msg.getMessageBody()
como parte de la consulta.
Sí, se borró el mensaje (¡hurra!). Desafortunadamente la barra de notificaciones no se actualiza :(
Al abrir el área de notificación verá el mensaje de estar allí para usted ... pero cuando se pulsa sobre él para abrirlo - se ha ido
!
Para mí, esto no es lo suficientemente bueno, quiero que desaparezca todo rastro del mensaje. No quiero que el usuario piense que hay un TXT cuando no existe (eso solo causaría informes de errores).
Internamente en el sistema operativo el teléfono llama al MessagingNotification.updateNewMessageIndicator(Context)
, pero esa clase se ha ocultado de la API, y no quería replicar todo ese código solo por el bien de hacer que el indicador sea preciso.
que he encontrado haciendo algo útil con las capacidades de teléfono de Android a ser una experiencia muy desagradable. – BobbyShaftoe
buena pregunta compañero. Estaba buscando algo similar: D cheers –
Lo mejor sería evitar que los SMS lleguen a la bandeja de entrada en primer lugar: http://stackoverflow.com/questions/1741628/can-we-delete-an-sms-in- android-before-it-reaching-the-inbox/2566199 # 2566199 –