Каков наилучший / правильный способ воспроизведения / остановки мелодии на Android 8+, даже если приложение находится в фоновом режиме? - PullRequest
0 голосов
/ 08 октября 2019

Сначала некоторая справочная информация

У меня была проблема с запуском фоновой службы, когда приложение работает в фоновом режиме в Android 8+. Документация четко описывает новые ограничения для выполнения в фоновом режиме.

Поэтому я продолжил и реализовал свой сервис как JobIntentService (рекомендуемый способ для простых случаев). Кажется, это работает хорошо ... для первой ошибки, которую я все равно получил.

Воспроизведение рингтона ... должно быть просто

До Android 8 наше приложение использовало фоновый сервис для воспроизведениярингтон с использованием RingtoneManager (запуск воспроизведения в onStartCommand () и остановка при остановке службы). Это сработало довольно хорошо.

Из-за новых пределов фонового выполнения я попытался использовать JobIntentService и для этой задачи, но заметил, что его нельзя остановить явно. Итак, я попробовал с JobScheduler и JobService (поскольку, насколько я понимаю, JobIntentService в принципе должно делать то же самое без хлопот создания JobInfo ). У меня нет особых требований, поэтому я пошел с тем же материалом, который используется JobIntentService ( setOverrideDeadline (0) ).

JobService запускается, но система немедленно останавливается, даже когда я возвращаю true из onStartJob () . Я смотрю на это - может быть, я делаю что-то не так там.

... или это?

  • Я также рассматривал связанную службу , но это кажется странным, так как мне также нужно позвонить из другой службы (но, возможно, это будет хорошо). Связанные сервисы не подвержены влиянию фоновых ограничений, поэтому, возможно, это будет правильный путь.
  • Обычный фоновый сервис до Android 8 работал нормально, но я, очевидно, не могу его использовать.
  • Я не думаю, что служба переднего плана - это путь для простых мелодий звонка.
  • Я даже играл с идеей поднять приложение на передний план, чтобыОбойти проблему, но, глядя в гугл, это больше похоже на хак, чем на правильное решение.

Это должно быть просто, верно?

Я немного озадаченДело в том, что простой вопрос воспроизведения и остановки мелодии звонка не кажется слишком простым, включая фоновые вещи (если у меня есть приложение с какой-то способностью вызова, мне просто нужно, чтобы это работало, так почему я должен возитьсяс этим и заново изобретать колесо?).

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

Любой вклад приветствуется, спасибо.

...