studio programacion móviles libro intent desarrollo curso aplicaciones android android-activity broadcastreceiver intentfilter

programacion - Android: ¿cómo obtener una lista de todos los filtros de intención disponibles?



manual de programacion android pdf (9)

(respuesta parcial) IntentFilters se define en el archivo AndroidManifest.xml contenido en el archivo .apk de la aplicación. (en el elemento -> -> -> XML, como este:

No he encontrado una API para buscar todas las Intenciones definidas en todos los archivos .apk almacenados en un dispositivo. El sistema busca en la lista de todos los intentos en: android.content.Context.startActivity (Intent intennt) Que llama a un método nativo en android.app.ActivityManagerNative.startActivity () que usa un mecanismo de comunicación entre procesos (IPC) (utilizando una serialización de la información en un objeto ''Parcela'') para buscar los intentos e iniciar la Actividad. Entonces pude encontrar cómo se hace realmente.

Parece que puede obtener acceso de lectura a archivos .apk (muchos están almacenados en /system/app/*.apk). El archivo .apk es un archivo .jar y el archivo AndroidManifest.xml está disponible para eso, por lo que un programa debería poder leer y analizar el manifiesto y encontrar los IntentFilters, pero debería haber una API para facilitar esto.

Tengo documentos de búsqueda de Android y, por alguna razón insana, no puedo encontrar la lista de todos los filtros de intención disponibles.

Estoy buscando un filtro de intención, que haría algo así como, notificándome a través de Broadcast Receiver que se ha iniciado una actividad en particular (navegador de ejemplo o correo electrónico) o en primer plano. Alguien me puede ayudar con eso .


Ampliando la respuesta de Tom Fraser, la mejor manera es usando dumpsys con grep y sort.

dumpsys activity broadcasts |grep -iE ".+/.[0-9A-Z_/-]+:$" |sort

La expresión grep se asegura de capturar solo las líneas que terminan en el formato de intento de ...blahblah.SOME_INTENT: Puede que no atrape todo, pero es un buen comienzo.


Hay GET_INTENTS_FILTER - declarado para usarse en el futuro para consultar los filtros de intenciones, ver también http://code.google.com/p/android/issues/detail?id=3217

Sin embargo, la prioridad en el equipo de Android es pequeña. ¿Alguien listo para enviar un parche?


Hay una "base de datos" en http://www.openintents.org/en/ que intenta recopilar filtros de intención conocidos. También la doumentación para Intent enumera algunos.


No vas a encontrar eso. Los filtros de intenciones están definidos por la aplicación. Tendría que consultar la documentación de la aplicación paritcular que le interesa.


PackageExplorer enumera todos los filtros de intención definidos en las aplicaciones en su dispositivo

Para responder a su pregunta: usted crea los filtros de intención que desea usar para hacer que su actividad sea seleccionada cuando un programa está buscando un servicio o actividad. Entonces cada Actividad en un Paquete define su propia lista de filtros de intención.

Me pareció útil tener una lista de todos los filtros de intención definidos por todas las aplicaciones en un dispositivo, para saber qué aplicaciones el sistema invocaría cuando se procesara una intención. Puse una aplicación gratuita en Android Market, busco ''Package Explorer'' que busca todas las aplicaciones que puede encontrar en su dispositivo, decodifica el archivo AndroidManifest.xml y muestra una lista de todos los filtros de intención definidos por todas las aplicaciones. La tabla de todos los filtros de intención se puede ordenar por acción, categoría, campos de datos (es decir, esquema o tipo mimet), nombre del paquete o tipo de filtro de intención para que pueda encontrar todas las actividades en su dispositivo que responden a varias acciones o categorías.

Package Explorer también recopila todos los campos de permisos de uso en el manifiesto y muestra una lista de qué aplicaciones requieren qué permisos. Para que pueda encontrar todos los paquetes que usan ''SEND_SMS'' o algo así. Al hacer clic en el nombre de un paquete, se muestra el archivo AndroidManifest.xml descodificado (sin comprimir) para el paquete.


Puede consultar la lista de acciones y categorías estándar en sdk / platforms / android-x / data / broadcast_actions.txt


Si está fuera del dispositivo, puede ejecutar lo siguiente:

adb shell dumpsys paquete r

Esto le dará una lista de todos los filtros de intención estáticamente registrados.