Intereting Posts
Цель камеры / Действия – избегать сохранения в галерее Sqlite не возвращает такую ​​таблицу, но таблица присутствует, когда выбрана на устройстве OnePlusTwo Загрузка значения измерения из res / values ​​/ dimension.xml из исходного кода Существует ли программный способ определения, имеет ли камера оптический зум? Исключение безопасности только на Android 6 Второе подключение к серверному сотлу отказалось в android Запуск сервера Odoo (OpenERP) на Android Создание Android Instant App с компонентом приложения из кинжала Предотвращение изменения порядка представления приложения Android после запуска сервиса Редкое исключение NullPointerException в GoogleApiClient с использованием Firebase Использование SQLite из libGDX на Android Android SearchView Filter ListView Как создать глобальный высокий балл для моего приложения для Android? Как скрыть ActionBar при прокрутке ListView в Android? Как добавить динамическую библиотеку в Android?

Android-приемник для нескольких действий?

Простой вопрос – могу ли я зарегистрировать один BroadcastReceiver для нескольких действий с намерением? Вот что я рассматриваю:

<receiver android:name=".myReceiver"> <intent-filter android:priority="1000000"> <action android:name="android.intent.action.MEDIA_BUTTON" /> <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> </intent-filter> </receiver> 

Итак, в классе myReceiver ' onReceive , могу ли я проверить intent.getAction() для ACTION_MEDIA_BUTTON and ACTION_HEADSET_PLUG ?

Благодарю.

Я думаю, вы можете иметь несколько s, каждый из которых имеет свой элемент действия.

 <receiver android:name=".myReceiver"> <intent-filter android:priority="1000000"> <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> </intent-filter> <intent-filter android:priority="1000000"> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

Затем проверьте действие Intent в onReceive получателя.

Да, один BroadcastReceiver может принимать намерения с несколькими действиями. И ваш пример действителен. В одном фильтре может быть несколько «действий». Более того, в этом случае он более уместен, чем кажется более безопасным: создание нескольких фильтров с одним действием (как предлагается в ответе @advantej). Несколько действий в фильтре ясно сообщают, что вы ожидаете одно из нескольких действий (логическое «или»).

Эти слова из « Intent и Intent filters » объясняют выбор между одним и несколькими фильтрами намерений для более сложных случаев:

Можно создать фильтр, который содержит более одного экземпляра <action>, <data> или <category>. Если вы это сделаете, вам просто нужно быть уверенным, что компонент может обрабатывать любые и все комбинации этих фильтрующих элементов.

Если вы хотите обрабатывать несколько видов намерений, но только в определенных комбинациях действий, данных и типа категории, вам нужно создать несколько фильтров намерений.

Пожалуйста, ознакомьтесь с различными примерами фильтров Intent здесь: AndroidManifest.xml

Да, вы можете иметь несколько действий для того же BroadcastReceiver. Фактически, то, что вы сделали, просто правильно:

 <receiver android:name=".myReceiver"> <intent-filter android:priority="1000000"> <action android:name="android.intent.action.ACTION_HEADSET_PLUG"/> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

Я уже использовал этот подход в проекте, и он сработал.

О приоритете, который вы установили:

https://developer.android.com/guide/topics/manifest/intent-filter-element.html

Android: priority Приоритет, который должен быть задан родительскому компоненту в отношении обработки намерений типа, описанного фильтром. Этот атрибут имеет значение как для действий, так и для широковещательных приемников:

Он предоставляет информацию о том, насколько способна деятельность реагировать на намерение, соответствующее фильтру, по сравнению с другими действиями, которые также могут реагировать на намерение. Когда намерение может быть обработано несколькими действиями с разными приоритетами, Android будет рассматривать только те, у которых более высокие значения приоритета, в качестве потенциальных целей для намерения.

Он контролирует порядок выполнения широковещательных приемников для приема широковещательных сообщений. Те, у которых более высокие значения приоритета, вызываются до тех, у кого более низкие значения. (Заказ применяется только к синхронным сообщениям, он игнорируется для асинхронных сообщений.)

Используйте этот атрибут только в том случае, если вам действительно нужно наложить определенный порядок, в котором принимаются трансляции, или хотите заставить Android предпочесть одно действие над другими.

Значение должно быть целым числом, например «100». Более высокие номера имеют более высокий приоритет. Значение по умолчанию равно 0. Значение должно быть больше -1000 и меньше 1000.