2010-11-04 13 views
22

Tengo documentos de búsqueda de Android y por alguna razón de locura no puedo encontrar la lista de todos los filtros de intención disponibles.Android - ¿Cómo obtener una 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 .

Respuesta

6

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 en la que está interesado.

+0

Ahan déjame ver que ... –

+1

Y puedo decirte que no podrás determinar cuándo comienzan la mayoría de las aplicaciones y que casi con seguridad no serás capaz de decir cuándo entran en primer plano. Por supuesto, puede modificar el firmware de Android si necesita esta información para un propósito específico. Pero de lo contrario es un problema de seguridad. – Falmarri

+0

desafortunadamente solo una pequeña parte de las aplicaciones proporciona documentación para sus intenciones ... – pleerock

3

(respuesta parcial) Los filtros de intención se definen en el archivo AndroidManifest.xml que se encuentra en el archivo .apk de la aplicación. (En el -> -> - element> XML, así:.

no he encontrado una API para buscar todos los Fines definidos en todos los archivos .apk almacenados en un dispositivo El sistema busca en la lista de todos los intentos en: android.content.Context.startActivity (intención intencionada) que llama a un método nativo en android.app.ActivityManagerNative.startActivity() que usa un mecanismo de comunicación entre procesos (IPC) (usando una serialización de la información en un Objeto 'Parcel') para buscar los intentos e iniciar la Actividad. Así pude encontrar cómo se hace realmente.

Parece que puede obtener acceso de lectura a archivos .apk (ma ny se almacenan 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.

+0

Lo probé y AndroidManifest.xml fue de alguna manera enviado. Podía leer algunas cadenas, pero el resto solo era bytecode. – Nulano

34

listas PackageExplorer todos intención de filtros definidos en aplicaciones en su dispositivo

Para responder a su pregunta: Se crea la intención-filtro (s) que desea ser utilizado para hacer que su actividad para ser seleccionado cuando un programa es 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 las aplicaciones que requieren 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.

+0

¿Es eso - https://play.google.com/store/apps/details?id=fr.xgouchet.packageexplorer&hl=en? –

+0

@techtonik Sí, aparentemente es así. Es una sección de _Broadcast Receivers_ para cada aplicación, funciona bien para mí. – Guillaume

4

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.

3

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

+0

Lo siento, es malo que las categorías estándar estén en 'categories.txt' – IronBlossom

+0

¿Es probable que puedas editar tu propia publicación y también proporciones un enlace donde la encontraste? – not2qubit

10

Si usted está fuera de dispositivo sólo se puede ejecutar lo siguiente:

adb shell dumpsys paquete r

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

+0

Desafortunadamente, descarga el paquete PackageManagerService.mActivities que no está disponible fuera. Por lo tanto, no puede acceder a los filtros de intención a través de API. – Oleksandr

3

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

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

La expresión GREP se asegura de que sólo las líneas de captura que terminan en la intención como el formato de ...blahblah.SOME_INTENT:. Puede que no atrape todo, pero es un buen comienzo.

+1

En mi caso (Linux) tuve que eliminar '$' – probablemente debido a EOL. – pevik

Cuestiones relacionadas