Мне нужно запустить службу во время загрузки. Я много искал. Они говорят о Broadcastreceiver. Поскольку я новичок в разработке Android, у меня не было четкого представления об услугах на Android. Пожалуйста, предоставьте некоторый исходный код.
109
startForeground()
в своем сервисе. В противном случае Android и его пользователи убьют ваш сервис как пустую трату места, и вы получите неприятные комментарии в Android Market. В большинстве ситуаций, когда вы думаете, что хотите, чтобы служба запускалась во время загрузки, вам лучше использовать,AlarmManager
чтобы ваша служба могла запускаться периодически, а не постоянно .AlarmManager
после перезапуска вам необходимо выполнить очень похожие шаги (разница заключается в содержимомonReceive
метода)Ответы:
Создайте
BroadcastReceiver
и зарегистрируйте его, чтобы получить ACTION_BOOT_COMPLETED . Вам также понадобится RECEIVE_BOOT_COMPLETED разрешение .Читайте: Прослушивание и трансляция глобальных сообщений, а также установка сигналов тревоги
источник
Ваш приемник:
Ваш AndroidManifest.xml:
источник
С http://www.jjoe64.com/2011/06/autostart-service-on-device-boot.html
источник
android.intent.category.LAUNCHER
!В большинстве решений, размещенных здесь, отсутствует важная деталь: выполнение этого без блокировки пробуждения может привести к тому, что ваша служба будет убита до того, как она завершит обработку. Видел это решение в другой ветке, отвечая и здесь.
Поскольку WakefulBroadcastReceiver устарел в api 26, он рекомендуется для уровней API ниже 26
Вам нужно получить блокировку следа. К счастью, библиотека поддержки дает нам класс для этого:
затем в вашем Сервисе не забудьте снять блокировку пробуждения:
Не забудьте добавить разрешение WAKE_LOCK и зарегистрировать получатель в манифесте:
источник
вы должны зарегистрироваться как для BOOT_COMPLETE, так и для REBOOT
источник
Также зарегистрируйте созданный вами сервис в манифесте и используйте права доступа как
а затем в braod cast Reciever позвоните в вашу службу
источник
Сначала зарегистрируйте получатель в файле manifest.xml:
а затем напишите трансляцию для этого приемника, например:
источник
Чтобы перезапустить службу в
Android O
или более, т.е. OS> 28 Используйте этот код KOTLIN VERSION 1) Добавьте разрешение в манифест2) Создайте
Class
и расширите его с помощьюBroadcastReceiver
3) Объявите в файле манифеста, подобном этому, в теге приложения
источник
Пожалуйста, проверьте JobScheduler на предмет API выше 26
WakeLock был лучшим вариантом для этого, но он устарел на уровне api 26. Пожалуйста, проверьте эту ссылку, если вы считаете, что уровни api выше 26
https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html# startWakefulService (android.content.Context,% 20android.content.Intent)
Это говорит
так как он говорит cosider JobScheduler
https://developer.android.com/reference/android/app/job/JobScheduler
если он должен что-то сделать, а не начать и сохранить его, вы можете получить широковещательную передачу ACTION_BOOT_COMPLETED
Если речь не идет о переднем плане, пожалуйста, проверьте, может ли служба доступности
другой вариант - запустить действие из широковещательного приемника и завершить его после запуска службы в onCreate (), поскольку более новые версии Android не позволяют запускать службы из приемников
источник