Cómo detener SMS de pasar a Bandeja de entrada

Antes de Android 4.4 era capaz de detener los mensajes de pasar a la bandeja de entrada al establecer la prioridad como este

<receiver android:name="com.serviceschedular.helperClasses.SmsReceiver" > <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 

Y luego abortBroadcast () en los mensajes onRecieve (). Sin embargo, en Android 4.4 debemos definir SMS_DELIVER_ACTION para que nuestra aplicación de mensajería sea la predeterminada:

Preparación de sus aplicaciones de SMS para KitKat

Al hacer esto, puedo recibir mensajes primero y no se mueven a ninguna otra aplicación de mensajería, pero también tengo que enviarlos a la aplicación de mensajería si no cumple mis criterios. Entonces, ¿hay alguna forma de lograr esta funcionalidad?

Cuando SMS es recibido por el sistema Android, transmite una intención de difusión ordenada con la acción "android.provider.Telephony.SMS_RECEIVED". Todos los receptores registrados, incluyendo la aplicación SMS por defecto del sistema, reciben este Intent en orden de prioridad que se estableció en su filtro de intenciones. La orden para receptores de radiodifusión con la misma prioridad no está especificada. Cualquier BroadcastReceiver podría impedir que otros receptores de radiodifusión registrados reciban la emisión usando abortBroadcast ().

Por lo tanto, todo lo que necesita es receptor de difusión como este:

 public class SmsFilter extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { Bundle extras = intent.getExtras(); if (extras != null) { Object[] pdus = (Object[])extras.get("pdus"); if (pdus.length < 1) return; // Invalid SMS. Not sure that it's possible. StringBuilder sb = new StringBuilder(); String sender = null; for (int i = 0; i < pdus.length; i++) { SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]); if (sender == null) sender = message.getOriginatingAddress(); String text = message.getMessageBody(); if (text != null) sb.append(text); } if (sender != null && sender.equals("999999999")) { // Process our sms... abortBroadcast(); } return; } } // ... } } 

Parece que la aplicación de procesamiento de SMS predeterminada del sistema utiliza la prioridad de 0, por lo que podría intentar 1 para que su aplicación esté antes de ella. Añada estas líneas a su

AndroidManifest.xml:

 <receiver android:name=".SmsFilter"> <intent-filter android:priority="1"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> 

No olvide los permisos necesarios:

 <uses-permission android:name="android.permission.RECEIVE_SMS"/> 

Por cierto, puedes encontrar todos los receptores registrados y sus prioridades usando este código:

 Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED"); List<ResolveInfo> infos = context.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0); for (ResolveInfo info : infos) { System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority); } 

============================================================================== Unesdoc.unesco.org unesdoc.unesco.org

Para evitar que los SMS vayan a la bandeja de entrada en Android Kitkat

Se introdujo un cambio en KitKat que sólo permite que una aplicación a la vez (la aplicación predeterminada de SMS) tenga permisos de escritura en el SMS DB y pueda consumirlo.

Usted tiene 2 maneras de resolver su problema:

  • Siga los consejos de Google sobre cómo solicitar al usuario que cambie la aplicación predeterminada de SMS a su aplicación durante el tiempo que necesite realizar los cambios (y una vez que termine de hacerlo, permita que el usuario vuelva a la aplicación SMS predeterminada original).
  • Encuentre una manera hacky temporal de hacer lo que usted necesita hacer. Como sugerencia, hay una API oculta: AppOpsManager que podría explotar potencialmente para darle a su aplicación permisos de escritura (OP_WRITE_SMS). Vaya a esta página XDA para obtener más información sobre ella:

Cómo escribir a SMS Content Provider en Android KitKat SIN ser aplicación SMS predeterminada

Responder si tienes alguna consulta …

ACTUALIZAR

A partir de Android 4.4 Kitkat, no es posible realizar ningún tipo de operaciones relacionadas con SMS sin ser la aplicación predeterminada de SMS. Las aplicaciones de restauración y copia de seguridad tampoco lo pueden hacer. La mayoría de ellos han actualizado su aplicación para admitir esta funcionalidad y ahora pide al usuario que los seleccione como la aplicación predeterminada de SMS.

La actualización de Android KitKat dejó de soportar la escritura del SMS con otras aplicaciones. Sólo se puede escuchar, pero no se puede escribir. Si desea enviar sms, tiene que enviarlo a la intención predeterminada de SMS y el usuario tiene que aprobar y haga clic en ENVIAR antes de enviar SMS.

Para su referencia: Proveedor de SMS

  • Envío de mensajes de texto mediante programación en android
  • Envío de un SMS en Android a través de ADB
  • Identificador único para SMS y contactos (para comprobar la duplicación) en Android
  • Intención del informe de entrega de mensajes de Android SMS
  • Recibir SMS en la aplicación para Android
  • ¿Cuáles son los significados de los valores en el proveedor de contenidos "content // sms /" de Android?
  • ¿Cómo obtener el informe de entrega para el mensaje de texto enviado?
  • Cómo obtener el número smsc de un teléfono en android?
  • Escucha SMS salientes o caja enviada en Android
  • Bloquear llamadas entrantes y sms en android
  • Interceptar SMS recibido en Delphi XE5 para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.