2010-11-01 17 views
13

Estoy intentando registrar mi actividad para que pueda ser utilizada por el selector/selector de actividades, lo que permite que el usuario elija si seleccionar o no mi aplicación/actividad para completar lo que intentan hacer.Android - ¿Filtro de intención?

Deseo brindar la opción para que el usuario pueda seleccionar mi aplicación cuando quiera enviar un mensaje SMS y cuando quiera realizar una llamada saliente, para tratar de lograr esto, agregué las siguientes piezas de código dentro de mis etiquetas de actividad en mi manifiesta:

<intent-filter> 
<action android:name="android.intent.action.SENDTO" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<data android:mimeType="text/plain" /> 
</intent-filter> 

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

sin embargo, el selector de Actividad nunca aparece y las aplicaciones nativas se utilizan sin proporcionar una opción para el usuario. ¿Alguien puede ver dónde estoy yendo mal?

EDIT:

he dado cuenta de que necesito añadir

<data android:scheme="sms" /> 
<data android:scheme="smsto" /> 

para el mensaje SMS, pero lo que puedo utilizar para la llamada saliente?

EDIT 2:

He intentado lo siguiente para la llamada saliente:

<intent-filter> 
<action android:name="android.intent.action.VIEW" /> 
<action android:name="android.intent.action.DIAL" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<category android:name="android.intent.category.BROWSABLE" /> 
<data android:scheme="tel" /> 
</intent-filter> 

Pero, de nuevo sin suerte, ha sido bloqueado este de 1.6 en?

Datos 3:

Esto es lo que sucede cuando hago clic móvil del texto:

alt text

por lo que quiero lo mismo cuando hago clic llamada móvil

Respuesta

9

creo que debería ayudarle a

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

Probado en Android 2.1

+1

¿Alguien ha notado que esto no funciona en los teléfonos HTC? He agregado el mismo filtro de intención a mi actividad, y funciona en algunos teléfonos, pero en el HTC Incredible mi actividad nunca se presenta como una opción para completar el intento. –

3

Esto se debe a las actividades y servicios no pueden recogerse fuera de los intentos por su propia cuenta. Necesita usar un BroadcastReceiver. Para implementar esto, hacer lo siguiente:

Extender la clase BroadcastReceiver de Android de este modo:

public class MyReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
     Context context = getApplicationContext(); 
    Intent sendIntent = new Intent(); 
    if (intent.getAction().equals(Intent.NEW_OUTGOING_CALL)) { 
    sendIntent.setClass(context, MyActivity.class); 
    context.startActivity(sendIntent); 
    } 
     else if (intent.getAction().equals(Intent.SOME_OTHER_INTENT) { 
      sendIntent.setClass(context, MyService.class); 
    context.startService(sendIntent); 
     } 
     // More else ifs for more intents you want to catch. 
} 

} 

Luego hay que declarar el receptor en su manifiesto de la siguiente manera:

<receiver android:name="MyReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     // more intents you want to catch here 
    </intent-filter> 
</receiver> 

Sólo las intenciones declaradas en el Receptor será capturado por su Receptor, por lo que si desea capturar varios intentos lanzados por el sistema u otros programas y desea hacer exactamente lo mismo cuando se detectan sus intenciones, especifique los intentos aquí en el manifiesto y omita el si/otros bloques en el método onReceive.

+1

No pienso que es la forma correcta para mí para lograr lo que yo quiero, yo quiero para inscribirse en el SEND y DIAL intentos enviados desde el sistema , Cuando hago clic en enviar texto, aparece el mensaje ENVIAR que funciona como el anterior, aparece el cuadro de diálogo "Acción completa usando" que es exactamente lo que quiero, solo necesito hacer lo mismo cuando hago clic en el contacto de llamada. –

+2

Ah, entonces quizás necesite especificar ciertos permisos para los cuales quiere que se le permita usar su programa. Mira http://developer.android.com/reference/android/Manifest.permission.html. Creo que debes usar el permiso CALL_PHONE. – AndrewKS

+0

Sí, tengo eso allí también - No entiendo por qué no funciona en absoluto. –

1

Debe agregar una prioridad al filtro de intención para que Android lo tenga en cuenta. Por ejemplo:

<activity android:name="YourActivity"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 
2

esto funcionó para mí

<activity 
     android:label="@string/app_name" 
     android:name=".TestIntentActivity" >    
     <intent-filter> 
     <action android:name="android.intent.action.CALL" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
     <data android:scheme="tel" /> 
     </intent-filter> 
    </activity> 
Cuestiones relacionadas