Android - Как получить список всех доступных фильтров намерений? - PullRequest
24 голосов
/ 04 ноября 2010

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

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

Ответы [ 9 ]

35 голосов
/ 27 января 2011

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

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

Мне показалось полезным иметь список всех фильтров намерений, определенных всеми приложениями на устройстве, чтобы знать, какие приложения будет вызывать система при обработке намерения. Я поместил бесплатное приложение на Android Market, поищу «Package Explorer», который ищет все приложения, которые он может найти на вашем устройстве, декодирует файл AndroidManifest.xml и отображает список всех фильтров намерений, определенных всеми приложениями. Таблицу всех фильтров намерений можно отсортировать по полям «Действие», «Категория», «Данные» (т. Е. Схема или mimetype), имени пакета или типу фильтра намерений, чтобы вы могли найти все Activite на вашем устройстве, которые отвечают на различные действия или категории. *

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

13 голосов
/ 13 января 2015

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

пакет adb shell dumpsys r

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

5 голосов
/ 04 ноября 2010

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

4 голосов
/ 25 марта 2013

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

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

4 голосов
/ 27 января 2011

В http://www.openintents.org/en/ существует «база данных», которая пытается собрать фильтры с намеренными намерениями. Также в разделе «Намерение» перечислены некоторые из них.

3 голосов
/ 22 сентября 2015

Продолжая ответ Тома Фрейзера, лучше всего использовать dumpsys с grep и sort.

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

Выражение grep позволяет отлавливать только те строки, которые заканчиваются в формате, аналогичном ...blahblah.SOME_INTENT:. Может не все поймать, но это хорошее начало.

3 голосов
/ 15 мая 2013

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

3 голосов
/ 20 января 2011

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

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

3 голосов
/ 19 января 2011

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

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

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

...