Я пытаюсь выяснить, какой правильный (новый) подход для обработки Intent.ACTION_MEDIA_BUTTON в Froyo. В течение до 2.2 дней нам приходилось регистрировать BroadcastReceiver (либо постоянно, либо во время выполнения), и события Media Button появлялись, если никакое другое приложение не перехватывало их и не прерывало широковещательную передачу.Любые рекомендации по работе с гарнитурой и Bluetooth AVRC для управления транспортом в Android 2.2
Froyo по-прежнему несколько поддерживает эту модель (по крайней мере, для проводной гарнитуры), но также вводит методы registerMediaButtonEventReceiver и unregisterMediaButtonEventReceiver, которые, как представляется, контролируют «транспортный фокус» между приложениями.
Во время моих экспериментов использование registerMediaButtonEventReceiver приводит к тому, что кнопки bluetooth и кнопки проводной гарнитуры направляются на приемник вещания приложения (приложение получает «транспортный фокус»), но похоже, что любое изменение в маршрутизации звука (например, отсоединение гарнитуры) убирает фокус обратно на медиаплеер по умолчанию.
Какова логика реализации в Android 2.2? Каков правильный способ управления транспортными средствами? Нужно ли нам обнаруживать изменения в маршрутизации звука и пытаться восстановить фокус?
Это проблема, с которой приходится сталкиваться любому стороннему медиаплееру на платформе Android, поэтому я надеюсь, что кто-то (возможно, инженер Google) может предоставить некоторые рекомендации, которые мы все можем выполнить. Наличие стандартного подхода может привести к тому, что кнопки управления гарнитурой станут более предсказуемыми для конечных пользователей.
Стефан
Я обнаружил, что если я вызываю registerMediaButtonEventReceiver каждый раз, когда я получаю событие ACTION_AUDIO_BECOMING_NOISY, которое улавливает случаи, когда медиаплеер по умолчанию захватывал регистрацию вдали от моего приложения. Мне также пришлось вызвать abortBroadcast(), чтобы другие приложения не получили это событие после меня, а затем захватили медиа-кнопки, после того, как я только что зарегистрировался для них. – skyhigh