2012-03-06 17 views
7

Tengo un problema. Iam utilizando el código de abajo para interrumpirla enlaces a mi aplicación comointerupting enlace a mi aplicación

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http" android:host="twitter.com"/> 
    <data android:scheme="http" android:host="facebook.com"/> 
</intent-filter> 

Pero el problema es que necesito fijar esquema de datos y anfitrión en tiempo de ejecución es decir, que pueda añadir o eliminar el host en tiempo de ejecución. Así que por favor alguien me ayude en el establecimiento del valor de esquema de datos y el anfitrión runtime.I estoy usando código de abajo pero no está funcionando

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.VIEW"); 
filter.addCategory("android.intent.category.DEFAULT"); 
filter.addCategory("android.intent.category.BROWSABLE"); 
filter.addDataScheme("http"); 
filter.addDataAuthority("www.facebook.com", null); 
RecieveBroadcaster receiver = new RecieveBroadcaster(); 
registerReceiver(receiver, filter); 
+0

alguien puede ayudarme – saba

+0

Tengo la respuesta, así que si alguien necesita ayuda. ACTION.VIEW es una acción de actividad. Por lo tanto, no podemos registrarlo con un receptor de difusión. Dado que el filtro de intención no se puede configurar en el tiempo de ejecución (excepto en el caso del receptor de difusión). Y el receptor de difusión solo puede transmitir acciones de transmisión como android.intent.action.PHONE_STATE. Por lo tanto, registrar una ACTION> VIEW no está permitido y el receptor de broadcast nunca responderá. – saba

Respuesta

4

En sentido estricto, la cadena correspondiente a ACTION_VIEW es una acción actividad por convención ; el hecho de que lo coloque en el elemento intent-filter de activity en su manifiesto, hace que sea una acción de actividad. El sistema los escucha en nombre de su aplicación, que es básicamente la razón por la que no (no puede) escucharlos usted mismo. El método Context.startActivity() genera estos Intent s.

Las reglas de resolución de intención en realidad determinan si un determinado Intent coincide con cualquier IntentFilter s. Para los intentos de actividad, puede haber múltiples coincidencias, y eso generalmente muestra la interfaz "Selector", por lo que el usuario puede seleccionar un objetivo.

Hay tres Intent "corrientes" que nunca se cruzan: startActivity(), sendBroadcast() y startService(). Todos estos se inician mediante métodos en Context y cada uno tiene un objetivo específico Activity, BroadcastReceiver y Service, respectivamente.

Es una simple cuestión de establecer un BroadcastReceiver (no ReceiveBroadcaster hicieron que incluso tratan de ese código?) Para obtener los eventos de su interés, y luego usar Context.startActivity() con el Intent desea. Incluso puede usar una acción personalizada, para que sepa que fue desencadenada por el receptor y no por el usuario.

La única pregunta es: ¿hay algún evento de transmisión que pueda organizar para recibir? Puede haber un evento del sistema en el que se pueda registrar, o usted mismo puede generar un evento personalizado, a través del Context.sendBroadcast().

Recuerde que puede inspeccionar el Intent entrante su actividad se inició, y "reenviar" el mismo o un Intent modificado si no coincide exactamente con lo que está buscando. Como ha determinado correctamente, no puede modificar dinámicamente el conjunto de una actividad de IntentFilter s, por lo que tendrá que inspeccionar el host de cada solicitud.

Recuerde que también puede registrar receptores en su manifiesto y que el sistema active automáticamente esa implementación.

Cuestiones relacionadas