Любые рекомендации по работе с транспортными средствами гарнитуры и Bluetooth AVRC в Android 2.2 - PullRequest
2 голосов
/ 26 мая 2010

Я пытаюсь выяснить, каков правильный (новый) подход к обработке Intent.ACTION_MEDIA_BUTTON в Froyo. За 2,2 дня до этого нам нужно было зарегистрировать BroadcastReceiver (постоянно или во время выполнения), и события Media Button будут поступать, пока никакое другое приложение не перехватит их и не прервет трансляцию.

Кажется, что Froyo все еще в некоторой степени поддерживает эту модель (по крайней мере, для проводной гарнитуры), но также вводит методы registerMediaButtonEventReceiver и unregisterMediaButtonEventReceiver, которые, кажется, управляют «транспортным фокусом» между приложениями.

Во время моих экспериментов использование registerMediaButtonEventReceiver приводит к тому, что нажатия кнопок bluetooth и проводной гарнитуры направляются на широковещательный приемник приложения (приложение получает «транспортный фокус»), но это похоже на любое изменение в маршрутизации звука ( например, отключив гарнитуру), фокус переходит обратно на медиаплеер по умолчанию.

Какая логика стоит за реализацией в Android 2.2? Как правильно управлять транспортом? Нужно ли нам обнаруживать изменения в маршрутизации звука и пытаться восстановить фокус?

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

Stefan

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

В Google есть подробное сообщение в блоге о внедрении более нового приемника событий мультимедийной кнопки 2.2 AudioManager при сохранении обратной совместимости со старыми устройствами.

http://android -developers.blogspot.com / 2010/06 / позволяя-приложения к плей-nicer.html

1 голос
/ 27 мая 2010

После некоторых экспериментов мне удалось получить рабочее решение с новой инфраструктурой фокусировки транспорта и звука в Android 2.2.

В конечном итоге я запрашиваю как Audio Focus (используя AudioManager.requestAudioFocus), так и Trasport Focus (используя AudioManagter.registerMediaButtonEventReceiver) каждый раз, когда мое приложение начинает воспроизведение.

requestAudioFocus принимает обратный вызов, который вызывается, когда у вас отнимается аудио-фокус (например, внутренний проигрыватель начинает воспроизведение). В моем случае я просто приостанавливаю воспроизведение в моем приложении, если фокус постоянно удерживается. Тот же самый обратный вызов также теперь говорит вам, что фокус берется только временно (например, система Nav говорит), так что вы можете «приглушить» свое воспроизведение - уменьшите громкость или сделайте паузу и возобновите работу после того, как разговор закончится.

Единственная проблема заключается в том, что встроенный музыкальный проигрыватель фокусируется на транспортировке при каждом подключении гарнитуры Bluetooth. Это приводит к тому, что первое нажатие кнопки «Воспроизведение» на гарнитуре после ее подключения всегда запускает воспроизведение в музыкальном проигрывателе по умолчанию.

Вероятно, есть способ обнаружить подключение гарнитуры и «захватить» транспортный фокус. В моем случае я решил не «драться» с проигрывателем по умолчанию и вернуть транспортный фокус, когда пользователь вручную начнет воспроизведение в моем приложении.

Если у кого-то есть более глубокая проницательность или он знает, как лучше справиться с транспортировкой / фокусировкой звука, поделитесь им.

0 голосов
/ 14 сентября 2011

У меня тоже есть такая же проблема с регистрацией медиа кнопки.

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

После того, как несколько пользователей пожаловались, что их кнопки управления паузой и воспроизведением через Bluetooth периодически перестают работать для управления моим приложением, я реализовал код, который перерегистрирует мое приложение, вызывая registerMediaButtonEventReceiver каждые 2 секунды. Это позволяет мне вернуть регистрацию кнопки и, по большей части, избегать временного окна, в котором пользователь нажимает кнопку мультимедиа Bluetooth, а медиаплеер по умолчанию отвечает.

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

Обходной прием, позволяющий сохранить работу 2-секундного таймера и перерегистрацию, работает, но я хотел бы избавиться от этого 2-секундного таймера, если кто-то нашел обходной путь для регистрации мультимедийных кнопок, периодически переключаясь обратно на медиаплеер по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...