El filtro de intenciones no funciona para la pantalla de llamada

Estoy diseñando una pantalla de llamadas personalizadas para mostrar información, como la información de la libreta de direcciones de la persona que llama, en la pantalla durante la conversación telefónica. Mi aplicación se iniciará cuando el usuario presione el botón de llamada mediante el uso de un Intent Filter , después de lo cual voy a buscar otra información de la libreta de direcciones y añadirlo a la pantalla.

Mi problema es que cuando se presiona el botón de llamada, mi activity no se está iniciando. ¿Es correcto mi filtro de intenciones ? ¿Es posible interceptar la llamada Intent ? Por favor, comparta sus conocimientos sobre el manejo del evento de llamadas.

Mi Intent Filter se muestra a continuación.

 <activity android:name=".MyCallingScreen"> <intent-filter android:priority="100"> <action android:name="android.intent.action.CALL_BUTTON" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="tel" /> </intent-filter> </activity> 

En su caso intente cambiar su código de la siguiente manera:

 <intent-filter android:priority="100"> <action android:name="android.intent.action.CALL_BUTTON" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

Es trabajo para mí si presiona en un botón de llamada.

Intente utilizar el siguiente código para interceptar la llamada:

 <activity> <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Para HTC algunos cambios allí:

 <activity> <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/phone" /> <data android:mimeType="vnd.android.cursor.item/phone_v2" /> <data android:mimeType="vnd.android.cursor.item/person" /> </intent-filter> </activity> 

Intención con acción android.intent.action.CALL_PRIVILEGED se llama cuando realiza una llamada desde la agenda telefónica de la siguiente manera: Lista telefónica-> Contacto-> Número de teléfono Haga clic en largo -> Elija hacer llamada en el menú desplegable.

No estoy seguro de si es posible reemplazar la pantalla de llamadas, pero es relativamente sencillo interceptar cualquier llamada saliente. Usted declara en su manifiesto un receptor:

  <receiver android:name="com.mystuff.CallInterceptor" android:exported="true"> <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> 

Y usted hace una clase de Java para este interceptor:

 public class CallInterceptor extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) { return; } String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); //do stuff using the number //assuming you do nothing too bad the call will happen and the regular //call screen comes up - but you can bring up another activity on top of it //for example shwing address info } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.