Как запустить службу при загрузке устройства в Android?

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


person vergil corleone    schedule 15.12.2013    source источник


Ответы (1)


  1. Сначала вам нужно разрешение

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
  2. Затем создайте широковещательный приемник как

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class Startup extends BroadcastReceiver {
    
        public Startup() {
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // start your service here
            context.startService(new Intent(context, SERVICE.class));
        }
    
    }
    
  3. Зарегистрируйте этот приемник BroadCast в своем манифесте как

    <receiver android:name="YOUR_PACKAGE.Startup" >
        <!-- This intent filter receives the boot completed event -->
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    

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

person Rachit Mishra    schedule 15.12.2013
comment
Для пользователя приложения очень важно, чтобы сервис всегда оставался в рабочем состоянии. Есть ли способ убедиться, что Android не убивает службу, если она не находится под экстремальной нагрузкой? - person vergil corleone; 15.12.2013
comment
Используйте службу IntentService, которая будет перезапущена, если служба будет убита при обработке намерения, других методов я еще не придумал. - person Rachit Mishra; 15.12.2013
comment
@twntee не согласен. Предполагается, что IntentService останавливается после однократного запуска, поэтому он не будет работать постоянно. - person Utsav Gupta; 02.09.2014
comment
@user2103379 user2103379 В некоторых случаях, когда ваш IntentService выполняет длительную операцию и системе необходимо освободить память, он будет убит. - person Rachit Mishra; 08.09.2014
comment
Попробуйте добавить android:enabled=true в decalration приемника в манифесте. - person berserk; 04.03.2015
comment
context.startService(new Intent(context, SERVICE.class)); вызовет исключение IllegalStateExeption для версий Android ›= Oreo, потому что вы больше не можете запускать службу, если приложение находится в фоновом режиме. Проверьте этот medium.com/@berriz_/ - person Fivos; 11.04.2019