Prioridad en un receptor de difusión para recibir llamadas

Mi intención es hacer un receptor Broadcast que realice acciones al recibir una llamada. ¿Es posible que tuviera más prioridad que la recepción automática de llamadas SO ?.

He intentado asignar una prioridad de 2147483647 que creo que es la mejor, pero todavía me salta a intentar la llamada antes de que el final de mi receptor.

<!-- Receiver de llamadas --> <receiver android:name=".PhoneCall"> <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver> 

Este enlace me responde:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

Hay dos clases principales de emisiones que se pueden recibir:

  • Las transmisiones normales (enviadas con Context.sendBroadcast) son completamente asíncronas. Todos los receptores de la emisión se ejecutan en un orden indefinido, a menudo al mismo tiempo. Esto es más eficiente, pero significa que los receptores no pueden usar el resultado o abortar las API incluidas aquí.

  • Las emisiones ordenadas (enviadas con Context.sendOrderedBroadcast) se envían a un receptor a la vez. A medida que cada receptor se ejecuta a su vez, puede propagar un resultado al siguiente receptor, o puede abortar completamente la emisión para que no se pase a otros receptores. Los receptores de órdenes que se ejecutan pueden ser controlados con el atributo android: priority del filtro de intención coincidente; Receptores con la misma prioridad se ejecutarán en un orden arbitrario.

La emisión como PHONE_STATE es "Difusión normal". Por lo que entiendo, no es posible dar prioridad a mi difusión. ¿Alguien piensa en alguna manera?

En realidad, no creo que 2147483647 es el mejor valor para usar, porque Android no lo entiende y ignorará este valor. Lo que tienes que hacer es intentar establecer la prioridad en 999, ya que supongo que 1000 es el valor máximo.

El valor debe ser menos el 1000!

Desarrollador de Android:

El valor debe ser un entero, como "100". Los números más altos tienen una prioridad más alta. El valor predeterminado es 0. El valor debe ser mayor que -1000 y menor que 1000.

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

Mi solución es la creación de dos receptores de difusión. El primer receptor se utiliza para recibir la emisión enviada por el sistema con Acción: android.intent.action.PHONE_STATE. El segundo receptor es llamado por el primer receptor. (El primer receptor enviará una transmisión y encuentro que esta transmisión será recibida por el segundo receptor después de que todos los receptores reciban android.intent.action.PHONE_STATE.)

Los códigos detallados se muestran a continuación: El primer receptor (CallReceiver.java):

 public class CallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent newintent = new Intent(intent); newintent.setAction(""); newintent.setClass(context, SecondReceiver.class); context.sendBroadcast(newintent); } } 

El segundo receptor (SecondReceiver.java):

 public class SecondReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String number = intent.getStringExtra( TelephonyManager.EXTRA_INCOMING_NUMBER); String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); } } 

AndroidManifest.xml:

 <receiver android:name=".CallReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> <receiver android:name=".SecondReceiver" /> 
  • Informar la actividad de un BroadcastReceiver SÓLO si está en primer plano
  • Usando getWindowManager () dentro de BroadcastReceiver
  • Java.lang.InstantiationException: class no tiene constructor de argumento cero
  • Broadcast reciever correr en el hilo principal?
  • Cómo desbloquear la pantalla cuando se llama BroadcastReceiver?
  • Android Whatsapp Inicio de llamada Receptor de difusión
  • ¿Cómo detectar cuando el usuario activa / desactiva el estado del GPS?
  • BroadcastReceiver no recibe la acción completa de descarga
  • ¿Cómo recibir sms en android?
  • BroadcastReceiver onReceive no se llama
  • ¿Es mejor práctica de código para registrar un receptor en manifiesto o en código?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.