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.
- Cómo cancelar el registro de BroadcastReceiver
- Los datos de referencias de Android Market no se están poblando
- Recepción de paquetes de instalación y desinstalación de eventos
- BroadcastReceiver en android.net.conn.CONNECTIVITY_CHANGE llamado varias veces
- Mostrar la notificación de la barra de estado desde un BroadcastReceiver
<!-- Receiver de llamadas --> <receiver android:name=".PhoneCall"> <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver>
- Cómo atrapar el sistema de difusión BOOT_COMPLETED, mi programa simplemente no funciona?
- Direccionamiento explícito de una intención a un receptor de difusión dinámica
- BroadcastReceiver: no se puede instanciar clase; Sin constructor vacío
- Android: Cómo comprobar si el número SMS entrante existe en el teléfono de contacto en BroadcastReceiver y el bloque es el número no existe
- Android BroadcastReceiver en el inicio - sigue funcionando cuando la actividad está en segundo plano
- LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) y Context.unregisterReceiver () son iguales?
- Detener el receptor de difusión de un botón en acivity
- ¿Cómo crear un diálogo de alerta desde la clase BroadcastReceiver?
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" />
- El método setLayoutParams () no funciona
- Android.database.sqlite.SQLiteException: near ": error de sintaxis (código 1):, mientras que la compilación: android error de programación