2010-11-04 2 views
22

У меня есть документы для Android и по какой-то безумной причине я не могу найти список всех доступных фильтров намерений.Android - Как получить список всех доступных фильтров намерений?

Я нахожу фильтр намерений, который бы сделал что-то вроде, уведомив меня через широковещательный приемник, что определенное действие (пример браузера или электронная почта) было запущено или на переднем плане. Может ли кто-нибудь помочь мне в этом.

ответ

6

Вы не найдете этого. Фильтры Intent определяются приложением. Вам нужно будет посмотреть документацию для интересующего вас приложения, которое вас интересует.

+0

Ахан дал мне понять, что ... –

+1

И я могу сказать вам, что вы не сможете определить, когда начнется большинство приложений, и вы почти наверняка не сможете сказать, когда они выйдут на передний план. Конечно, вы можете изменить прошивку Android, если вам нужна эта информация для определенной цели. Но в остальном это проблема безопасности. – Falmarri

+0

, к сожалению, только небольшая часть приложений предоставляет документацию по их намерениям ... – pleerock

3

(частичный ответ) IntentFilters определены в файле AndroidManifest.xml, содержащемся в файле .apk приложения. (В -> -> - элемент> XML, например:.

Я не нашел API для поиска всех целей, определенных во всех .apk файлов, сохраненных на устройстве система просматривает список из всех намерений в: android.content.Context.startActivity (намерение намерения) Что вызывает собственный метод в android.app.ActivityManagerNative.startActivity(), который использует механизм межпроцессного взаимодействия (IPC) (используя сериализацию информации в Объект «Посылка»), чтобы выполнить поиск и начать работу. Поэтому я смог найти, как это делается.

Похоже, что вы можете получить доступ для чтения к файлам .apk (ma ny хранятся в /system/app/*.apk). Файл .apk является файлом .jar, и в нем доступен файл AndroidManifest.xml, поэтому программа должна иметь возможность читать и анализировать манифест и находить IntentFilters, но API должен быть таким простым.

+0

Я просто попробовал, и AndroidManifest.xml был каким-то образом скомпилирован. Я мог читать некоторые строки, но остальное было просто байт-кодом. – Nulano

3

Существует GET_INTENTS_FILTER - заявил быть использоваться в будущем для запроса Intents фильтров см также http://code.google.com/p/android/issues/detail?id=3217

Однако приоритет в команде Android мала. Кто-нибудь, чтобы отправить патч?

34

списки PackageExplorer все умысел фильтры, определенные в приложениях в устройстве

Чтобы ответить на ваш вопрос: Вы создаете пристальный фильтр (ы) вы хотите использовать, чтобы вызвать вашу деятельность, чтобы быть выбран, когда программа ищет услугу или деятельность. Поэтому каждая операция в пакете определяет собственный список фильтров-намерений.

Мне было полезно иметь список всех фильтров намерений, определенных всеми приложениями на устройстве, - так что знайте, какие приложения система будет вызывать при обработке намерения. Я разместил бесплатное приложение на Android Market, ища «Package Explorer», который ищет все приложения, которые он может найти на вашем устройстве, расшифровывает файл AndroidManifest.xml и отображает список всех фильтров намерений, определенных всеми приложениями. Таблица всех фильтров намерений может быть отсортирована по полям Action, Category, Data (например, схема или тип изображения), имени пакета или типу фильтра намерений, чтобы вы могли найти на своем устройстве все Activites, которые отвечают на различные действия или категории.

Проводник пакетов также собирает все поля разрешений-применений в манифесте и отображает список приложений, для которых требуются разрешения. Таким образом, вы можете найти все пакеты, которые используют SEND_SMS или что-то в этом роде. При нажатии на имя пакета отображается декодированный (несжатый двоичный) файл AndroidManifest.xml для пакета.

+0

Разве что - https://play.google.com/store/apps/details?id=fr.xgouchet.packageexplorer&hl=ru? –

+0

@techtonik Да, это очевидно. Для каждого приложения есть раздел _Broadcast Receivers_, он отлично работает для меня. – Guillaume

4

В базе данных http://www.openintents.org/en/ есть «база данных», которая пытается собирать известные фильтры намерений. Кроме того, в режиме «Дополнение» для Intent перечислены некоторые.

3

этот пост старый, но для тех, кто ищет манифест информацию из приложений, установленных на определенный андроиде dwld этого приложения GOD:

https://play.google.com/store/apps/details?id=jp.susatthi.ManifestViewer

+1

как вы это делаете в коде? –

+1

ManifestViewer теперь вылетает при попытке просмотреть намерения –

3

Вы можете проверить список стандартных действий и категорий в SDK /platforms/android-x/data/broadcast_actions.txt

+0

Извините, что мои плохие стандартные категории находятся на 'categories.txt' – IronBlossom

+0

Возможно, вы можете отредактировать свой собственный пост, а также предоставить ссылку на то, где вы его нашли? – not2qubit

10

Если вы с устройством вы можете просто запустить следующее:

adb shell dumpsys package r

Это даст вам список всех статически зарегистрированных фильтров намерений.

+0

К сожалению, он выгружает массив PackageManagerService.mActivities, который недоступен на улице. Таким образом, вы не можете получить доступ к фильтрам намерений через API. – Oleksandr

3

Развернувшись на ответе Тома Фрейзера, наилучшим способом является использование dumpsys с помощью grep и сортировки.

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

Выражение Grep убеждается только улов строк, заканчивающихся намерение, как формат ...blahblah.SOME_INTENT:. Он может не поймать всех, но это хорошее начало.

+1

В моем случае (Linux) мне пришлось удалить '$' –, вероятно, из-за EOL. – pevik

Смежные вопросы