SMS reciben sin notificación

Quiero recibir un sms en mi aplicación, pero no quiero que mi Android muestre una notificación sobre ese evento. Algoritmo:

1) Recibir sms (está bien)

2) Si se trata de un sms con un formato de contenido especial (para mi aplicación), proceselo con mi aplicación y no muestre ninguna notificación.

3) Si se trata de un mensaje simple – no quiero procesarlo, por lo que debe mostrarse una notificación.

Intenté usar una emisión ordenada, pero no ayuda. En alguna parte leí que la emisión de SMS_RECEIVE no está ordenada, pero he visto algunas aplicaciones, que pueden recibir SMS sin notificar.

¿Alguien puede ayudarme o mostrarme la manera correcta de resolver este problema?

Gracias.

Actualizar: llamar a abortBroadcast () en boradcast no ayuda

Establecer prioridad en el filtro de intenciones // en el manifiesto

<intent-filter android:priority="100"> /*your receiver get high priority*/ 

// en el receptor de radiodifusión

  if (keyword_match) { // Stop it being passed to the main Messaging inbox abortBroadcast(); } 

Esto debería ser posible registrando su aplicación para recibir mensajes SMS y luego usar abortBroadcast () cuando detecte que su mensaje ha llegado. Usted dice que abortBroadcast () no funciona – el SMS es definitivamente manejado por su receptor de SMS?

Para cualquiera que quiera hacer esto, sigue leyendo …

Primero, declare el receptor SMS en su AndroidManifest.xml y asegúrese de que la aplicación tenga permiso para recibir mensajes SMS.

  <receiver android:name="mypackage.SMSReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_SMS" /> 

He aquí un ejemplo de código para manejar los mensajes SMS:

 public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); Object[] pdus = (Object[])extras.get("pdus"); for (Object pdu: pdus) { SmsMessage msg = SmsMessage.createFromPdu((byte[])pdu); String origin = msg.getOriginatingAddress(); String body = msg.getMessageBody(); // Parse the SMS body if (isMySpecialSMS) { // Stop it being passed to the main Messaging inbox abortBroadcast(); } } } } 

No deberías hacer esto. Es posible que otras aplicaciones requieran o necesiten recibir la transmisión SMS_RECEIVED. Al interrumpirlo, se interrumpirá la ejecución de las aplicaciones de terceros. Esta es una mala forma de programar. Sólo debe abortar las emisiones que cree, no las transmisiones del sistema. No sé por qué el sistema operativo Android le permite hacer esto.

No estoy seguro de si sé exactamente lo que está tratando de hacer, pero a partir de lo que entiendo que sólo quiere saber cómo no enviar una notificación?

¿Por qué no puedes simplemente hacer:

 If(instance 2){ //do your processing }else{ //send notification } 

Si quiere decir que quiere bloquear el sistema operativo de la radiodifusión, entonces usted podría estar fuera de suerte porque no creo que usted puede hacer eso

Yo necesita android: atributo de prioridad para que funcione

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

Usted está cometiendo un error, porque ha despedido abortBroadcast (); Si su mensaje especial para que el mensaje de difusión es abortado, por lo tanto, la notificación de SMS no se muestra, y sms no está guardando en la bandeja de entrada, usted tiene que hacer su propia notificación en "onRecive" si su mensaje especial se recibe. Ejemplo:

  public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); Object[] pdus = (Object[])extras.get("pdus"); for (Object pdu: pdus) { SmsMessage msg = SmsMessage.createFromPdu((byte[])pdu); String origin = msg.getOriginatingAddress(); String body = msg.getMessageBody(); // Parse the SMS body if (isMySpecialSMS) { // Stop it being passed to the main Messaging inbox abortBroadcast(); NotificationManager notificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher, "New Message (My Messaging app)", System.currentTimeMillis()); // Uses the default lighting scheme notification.defaults |= Notification.DEFAULT_LIGHTS; // Will show lights and make the notification disappear when the presses it notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS; Intent notificationIntent = new Intent(context, SplashActivity.class); PendingIntent pendingIntent =PendingIntent.getActivity(context, 0, new Intent(context, SplashActivity.class), 0); Log.i("Wakeup", "Display Wakeup"); PowerManager pm = (PowerManager)context.getApplicationContext().getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "Phone WakeUp"); wakeLock.acquire(); notification.setLatestEventInfo(context, "My Messaging App(New Message)",msg, pendingIntent); //notification.sound. notification.defaults |= Notification.DEFAULT_SOUND; notificationManager.notify(9999, notification); } else{ //Continue Broadcasting to main android app } } } } 

Espero que esto solucione tu problema

  • ¿Cómo enviar SMS desde la aplicación Android sin hacer su registro en la vista SMS del dispositivo?
  • Android: cómo obtener el número de teléfono de un SMS entrante?
  • ¿Cómo supervisar cada estado de SMS enviado?
  • ¿Cómo puedo enviar sms falsos a mí mismo sin el uso de la red móvil?
  • ContentObserver en el contenido: // sms / in 1.6+?
  • Iniciar la aplicación sms con una intención
  • Cómo eliminar un SMS de la bandeja de entrada en Android mediante programación?
  • Cómo obtener el nombre del contacto al recibir SMS
  • ¿Cómo rastrear los mensajes en Android?
  • El envío de SMS mediante Intent no incluye destinatarios en algunos dispositivos
  • Cómo averiguar qué SIM recibió SMS en Dual SIM Android Device
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.