¿Podemos eliminar un SMS en Android antes de que llegue a la bandeja de entrada?

Estoy borrando un SMS de la bandeja de entrada, pero quiero saber: ¿cómo puedo eliminarlo antes de que llegue a la bandeja de entrada?

Sí.

A pesar de algunas reacciones negativas a esta pregunta, existen usos legítimos para la interceptación de SMS. Por ejemplo: automatizar la verificación del número de teléfono, servicios que se aprovisionan a través de SMS (aunque generalmente esto debe hacerse con datos SMS) o para aplicaciones que mejoran la experiencia del usuario procesando mensajes con formato especial para mostrarlos en un buen Android UI específica.

A partir de Android 1.6, las transmisiones de mensajes SMS entrantes ( android.provider.Telephony.SMS_RECEIVED ) se envían como una ” transmisión ordenada “, lo que significa que puede decirle al sistema qué componentes deben recibir la transmisión primero.

Si define un atributo android:priority en su escucha de SMS, recibirá la notificación antes de la aplicación de SMS nativa.

En este punto, puede cancelar la transmisión, evitando que se propague a otras aplicaciones.


Actualización (octubre de 2013): cuando llega Android 4.4, se realizarán cambios en las API de SMS que pueden afectar la capacidad de una aplicación para influir en la entrega de SMS.
Echa un vistazo a esta publicación de blog de Desarrolladores de Android para obtener más información:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

Paso-1: Crea tu receptor de difusión personalizado para recibir sms. escriba la lógica para abortar el más amplio para que el mensaje no esté disponible para su bandeja de entrada

 public class SMSReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if(conditionMatches){ abortBroadcast(); } } } 

Step-2 Registre el receptor de difusión en AndoridManifest y coloque android: priority value un gran número

      

Eso es

¿Cómo funciona el código anterior?

Dado que los SMS que reciben una transmisión amplia son una emisión ordenada, el receptor con alta prioridad recibirá primero, de modo que su aplicación recibirá primero y después de recibir la recepción, estará cancelando la transmisión. Entonces ninguna otra aplicación puede recibirlo. Por lo tanto, los sms no existirán en la bandeja de entrada

La siguiente solución (“android: priority” y abortBroadcast ()) funciona siempre que la aplicación de Mensajería Android sea la predeterminada (me refiero a la aplicación de mensajería de Android). Si el usuario instala “GoSMSPro” o “HandcentSMS”, estas aplicaciones aún muestran mensajes en la bandeja de entrada, creo que esto se debe a “android: priority”. No veo ninguna forma mejor de solucionar el problema anterior si hay aplicaciones de mensajería de terceros instaladas en el teléfono.

 /** * Check priority * @param activity */ public static void receiverPriority(Activity activity){ Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED"); List infos = activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0); for (ResolveInfo info : infos) { System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority); } } 

Verifique la prioridad y establezca una prioridad más alta (en su manifiesto) que otros receptores.

Si tiene un escenario como este y desea eliminar o ignorar el mensaje relacionado con este número de contacto “+ 44xxxxx”, etc., utilice este código en el receptor de difusión de SMS

  if(sender.equalsIgnoreCase("+44xxxxxx") this.abortBroadCast(); 

También debes establecerlo como alta prioridad.