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:
- Los datos de Android enviados entre dos emuladores se truncan en tránsito
- ¿Es posible falsificar un SMS entrante en Android?
- ¿Cómo pasar datos a BroadcastReceiver?
- ¿Creación de una aplicación de SMS en Android?
- SMS enviado a través de SmsManager no automáticamente en la carpeta SENT?
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?
- ¿Cómo enviar mi ubicación (longitud y latitud) como una respuesta sms a otra persona?
- Los teléfonos de Redmi no piden permisos de SMS y por lo tanto no leen sms
- Cómo enviar y recibir mensajes SMS de datos
- Uso de SMS para verificar el número de teléfono de un dispositivo
- Uso del nuevo proveedor de contenido de Telephony para leer SMS
- Receptor de radiodifusión sigue funcionando después de cerrar la aplicación - Android
- Desarrollo de la versión personalizada de la aplicación incorporada de SMS / MMS para Android
- SMS BroadCast Receptor recibe muchas veces?
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
- Android JobScheduling – Tengo que pasar un objeto a mi trabajo, pero ¿cómo?
- Java.lang.NoClassDefFoundError en 4.1 y trabajando con 5.1.utilizando multidex en android studio