Сначала некоторая справочная информация
У меня была проблема с запуском фоновой службы, когда приложение работает в фоновом режиме в Android 8+. Документация четко описывает новые ограничения для выполнения в фоновом режиме.
Поэтому я продолжил и реализовал свой сервис как JobIntentService (рекомендуемый способ для простых случаев). Кажется, это работает хорошо ... для первой ошибки, которую я все равно получил.
Воспроизведение рингтона ... должно быть просто
До Android 8 наше приложение использовало фоновый сервис для воспроизведениярингтон с использованием RingtoneManager (запуск воспроизведения в onStartCommand () и остановка при остановке службы). Это сработало довольно хорошо.
Из-за новых пределов фонового выполнения я попытался использовать JobIntentService и для этой задачи, но заметил, что его нельзя остановить явно. Итак, я попробовал с JobScheduler и JobService (поскольку, насколько я понимаю, JobIntentService в принципе должно делать то же самое без хлопот создания JobInfo ). У меня нет особых требований, поэтому я пошел с тем же материалом, который используется JobIntentService ( setOverrideDeadline (0) ).
JobService запускается, но система немедленно останавливается, даже когда я возвращаю true из onStartJob () . Я смотрю на это - может быть, я делаю что-то не так там.
... или это?
- Я также рассматривал связанную службу , но это кажется странным, так как мне также нужно позвонить из другой службы (но, возможно, это будет хорошо). Связанные сервисы не подвержены влиянию фоновых ограничений, поэтому, возможно, это будет правильный путь.
- Обычный фоновый сервис до Android 8 работал нормально, но я, очевидно, не могу его использовать.
- Я не думаю, что служба переднего плана - это путь для простых мелодий звонка.
- Я даже играл с идеей поднять приложение на передний план, чтобыОбойти проблему, но, глядя в гугл, это больше похоже на хак, чем на правильное решение.
Это должно быть просто, верно?
Я немного озадаченДело в том, что простой вопрос воспроизведения и остановки мелодии звонка не кажется слишком простым, включая фоновые вещи (если у меня есть приложение с какой-то способностью вызова, мне просто нужно, чтобы это работало, так почему я должен возитьсяс этим и заново изобретать колесо?).
Я не являюсь в первую очередь разработчиком Android, поэтому я могу упустить некоторые важные очевидные вещи. Я попытался погуглить это без конца, и я получил тонны примеров того, как играть вещи, используя RingtoneManager и даже MediaPlayer или что-то подобное, но я не видел упоминаний о фоновом режимепроблема.
Любой вклад приветствуется, спасибо.