Как сохранить службу?

Как служба Whatsapp продолжает работать в фоновом режиме на телефонах huawei?

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

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

Я хочу написать такой сервис, как Whatsapp или AirDroid, кто-нибудь может объяснить это?

Я имею в виду, как написать сервис, который специально не закрывается при выключении экрана в телефонах HUAWEI.

Это мой служебный код

AppLifeService

public class AppLifeService extends Service {
@Override
public IBinder onBind(Intent intent) {

    return null;
}



@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    super.onStartCommand(intent, flags, startId);


    startForeground(5, AppLifeReciever.createNotification(this));


    return  START_STICKY;
}


@Override
public void onDestroy() {


    //startService(new Intent(this, AppLifeService.class)); Updated : not need


    super.onDestroy();

}
}

person hamidjahandideh    schedule 20.07.2016    source источник
comment
Вы проверяли на разных версиях ОС Android? В какой версии ОС служба останавливается?   -  person Prashanth Debbadwar    schedule 20.07.2016
comment
если ваша служба действительно находится на переднем плане (поскольку вы вызываете startForeground), то ее нельзя убить, и свидетельством этого является неотклоняемое уведомление. когда вы вызываете stopForeground?   -  person Ramin    schedule 20.07.2016


Ответы (3)


Служба с START_STICKY в повторном запуске onStartCommand() запустится снова автоматически, вам не нужно запускать ее снова в onDestroy()

    @Override
    public void onDestroy() {

      //  startService(new Intent(this, AppLifeService.class));
        super.onDestroy();

    }
person Sohail Zahid    schedule 20.07.2016
comment
Спасибо, сообщение обновлено. но я специально говорю о телефонах Huawei в то время, когда приложение не добавлено в список защищенных приложений. - person hamidjahandideh; 20.07.2016
comment
@hamidjahandideh извините, я понятия не имею конкретно о телефонах Huawei. - person Sohail Zahid; 20.07.2016
comment
Информация для новых пользователей, приходящих в эту ветку. Не гарантируется, что onDestroy будет вызываться в каждом случае. - person Manoranjan; 11.02.2020

@Sohail Zahid Ответ расскажет вам, как repeatedly запускать службу снова и снова, когда она остановлена. Но для того, чтобы служба оставалась живой, нужно играть песню в фоновом режиме.

Лучший подход, который я нашел, это

startForeground(int, Notification)

где значение int должно быть уникальным для каждого уведомления

Вам нужно указать Notification для метода, который отображается на панели уведомлений в разделе «Текущие». Таким образом, приложение будет работать в фоновом режиме без прерывания работы.

person AndroidGeek    schedule 09.08.2016

Вам нужно создать Service, чтобы автоматически открывать BroadcastService, когда он закрывается.

Например:

Служба вещания

public class MyBroadcastService extends BroadcastReceiver
{

 @Override
    public void onReceive(final Context context, Intent intent)
    {
     //do something
    }
}

Служба автоматического повторного открытия

public class MyService extends Service
{

@Override
    public void onCreate()
    {
        // Handler will get associated with the current thread,
        // which is the main thread.
        super.onCreate();
        ctx = this;

    }

 @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub

        return null;
    }

@Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.i(TAG, "onStartCommand");
        //Toast.makeText(this, "onStartCommand", Toast.LENGTH_LONG).show();

        return START_STICKY;
    }

//launch when its closed
@Override
    public void onDestroy()
    {
        super.onDestroy();
        sendBroadcast(new Intent("YouWillNeverKillMe"));
        Toast.makeText(this, "YouWillNeverKillMe TOAST!!", Toast.LENGTH_LONG).show();
    }
}

Заявите о своем AndroidManifest.XML

<receiver android:name=".BroadcastServicesBackground.MyBroadcastService">
            <intent-filter>
                <!--That name (YouWillNeverKillMe) you wrote on Myservice-->
                <action android:name="YouWillNeverKillMe"/>

                <data android:scheme="package"/>
            </intent-filter>
            <intent-filter>
                 <!--To launch on device boot-->
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

        <service android:name=".Services.MyService"/>
person Aspicas    schedule 20.07.2016
comment
я тестировал телефоны huawei и сервис закрывался без вызова onDestroy - person hamidjahandideh; 20.07.2016