Android как выполнять определенные задачи при нажатии кнопки гарнитуры?

#android #service #android-intent

#Android #Обслуживание #android-намерение

Вопрос:

Хорошо, итак, я пишу приложение, чтобы заставить внешнюю гарнитуру выполнять определенные функции. Я пытаюсь воспроизвести функциональность, аналогичную этому парню:

https://market.android.com/details?id=com.kober.headset

Список действий, которые он может выполнить при нажатии кнопки гарнитуры, таков: воспроизведение / пауза, предыдущая дорожка, повторный набор последнего номера телефона, запуск указанного приложения и т.д. Хотя я не знаю, как это сделать! Немного запутался с тем, как начать здесь. Я также немного смущен тем, как должен работать общий программный поток.

Прямо сейчас я могу правильно регистрировать нажатия кнопок через broastcast receiver и передавать это число (одинарный / двойной / тройной щелчок) сервису для запуска в фоновом режиме. Я использую фоновую службу, поэтому пользователю не нужно находиться в приложении, чтобы использовать функциональность.

Я на правильном пути? Как мне заставить щелчки воспроизводить / приостанавливать музыку, следующий / предыдущий трек и т.д.? Существуют ли определенные намерения, которые я должен использовать?

Приветствия.

Ответ №1:

Я на правильном пути?

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

Как мне заставить щелчки воспроизводить / приостанавливать музыку, следующий / предыдущий трек и т.д.?

Сначала напишите приложение для музыкального проигрывателя. Для большинства из нескольких тысяч существующих музыкальных плееров не существует документированных и поддерживаемых API для «воспроизведения / приостановки музыки, следующего / предыдущего трека и т.д.».

Комментарии:

1. Приложение для музыкального проигрывателя? Разве у пользователя уже нет доступа к различным музыкальным проигрывателям? Потому что я хочу иметь возможность, скажем, дважды щелкнуть и пропустить трек, пока пользователь уже находится в выбранном им музыкальном проигрывателе. Или я должен создать общее приложение, которое охватывает всю воспроизводимую музыку …? Здесь я немного потерялся, но спасибо за ответ

2. @maxcollins: Как я уже писал, не существует документированных и поддерживаемых API для «воспроизведения / приостановки музыки, следующего / предыдущего трека и т.д.» Для большинства из нескольких тысяч существующих музыкальных плееров. Следовательно, если вам нужны эти функции, вам нужно будет реализовать их в вашем собственном приложении для воспроизведения музыки.

3. Отлично. Но тогда мне любопытно — как существующий контроллер кнопок гарнитуры (связанный в OP) выполняет функциональность, которую я описал? В принципе, для любого музыкального проигрывателя, в котором вы находитесь, они делают так, чтобы кнопка гарнитуры могла быть настроена на переход к следующему треку, воспроизведение / паузу и т.д. Они программировали это для каждого конкретного случая для самых популярных музыкальных плееров?

4. @maxcollins: «как существующий контроллер кнопок гарнитуры (связанный в OP) выполняет описанную мной функциональность?» — для музыкального приложения AOSP, если они поддерживают этот проигрыватель, они, вероятно, используют какие-то недокументированные, неподдерживаемые методы, которые использует только дурак. Я не знаю, поддерживают ли они какие-либо другие проигрыватели и, если да, используют ли они документированные / поддерживаемые методы для этих проигрывателей.

5. Хорошо, в таком случае… Похоже, я должен ограничить свою область, возможно, любым проигрывателем по умолчанию. Итак, приступая к работе, будет ли создание объекта MediaPlayer моим лучшим выбором?