2011-12-01 13 views
6

Estoy diseñando una pantalla de llamada personalizada 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 comenzará cuando el usuario presiona el botón de llamada mediante el uso de Intent Filter, después de lo cual buscaré otra información de la libreta de direcciones y la agregaré a la pantalla.Filtro de intención no funciona para la pantalla de llamada

Mi problema es que cuando se presiona el botón de llamada, mi activity no se está iniciando. ¿Mi filtro de intención es, verdad? ¿Es posible interceptar la llamada telefónica Intent? Por favor, comparta su conocimiento sobre el manejo del evento de llamada.

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>  

Respuesta

4

En su caso tratar de cambiar el código 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 un trabajo para mí si presiona en un botón de llamada.

Intente utilizar 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 la acción android.intent.action.CALL_PRIVILEGED se llama cuando se hacer una llamada desde la agenda telefónica de la siguiente manera: Agenda telefónica-> Contacto-> Número de teléfono Clic prolongado -> Seleccionar hacer llamada desde el menú desplegable.

0

No estoy seguro si es posible reemplazar la pantalla de llamadas pero es relativamente simple interceptar cualquier llamada saliente. Se declara en su manifiesta 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 haces una clase 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 
    } 
} 
Cuestiones relacionadas