Фоновая служба останавливается, как только приложение закрывается

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

Intent mIntent=new Intent(this,BackgroundService.class);
startService(mIntent);

и в манифесте я добавил службу как

 <service android:name=".BackgroundService"
            android:enabled="true"/>

BroadReceiver класс

@Override
public void onReceive(Context context, Intent intent) {


    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {

        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        String smsMessageStr = "";
        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) 
sms[i]);

            smsBody = smsMessage.getMessageBody().toString();
            address = smsMessage.getOriginatingAddress();


            smsMessageStr += "SMS FROM :" + address + "\n";
            smsMessageStr += "Message :" + smsBody + "\n";
        }
            Toast.makeText(context, smsMessageStr, 
Toast.LENGTH_LONG).show();

backgroundService.java

public class BackgroundService extends Service{

private SmsBroadcastReceiver mSmsBroadcastReceiver;
private IntentFilter mIntentFilter;
private static final int NOTIFICATION_ID = 999;


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

    mSmsBroadcastReceiver=new SmsBroadcastReceiver();
    mIntentFilter=new IntentFilter();
    mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
    mIntentFilter.setPriority(999);
    registerReceiver(mSmsBroadcastReceiver,mIntentFilter);

    return START_STICKY;
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}
}

Я ПОПРОБОВАЛ службу переднего плана также как

 Notification notification = new NotificationCompat.Builder(this)
            .setContentTitle("TutorialsFace Music Player")
            .setTicker("TutorialsFace Music Player")
            .setContentText("My song")
            .setSmallIcon(R.mipmap.ic_launcher)
            .build();
        startForeground(NOTIFICATION_ID,
            notification);

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

как сделать так, чтобы моя служба просуществовала долго, даже когда приложение закрыто. Поскольку мое приложение основано на SMS, поэтому без службы я не могу получать сообщения, пока мое приложение закрыто, любая помощь будет оценена заранее, заранее спасибо.


person user8515823    schedule 04.10.2017    source источник


Ответы (1)


Да, служба работает в одном потоке с приложением, вы можете переопределить метод onDestroy, чтобы снова запустить службу с его собственным потоком.

@Override
public void onDestroy() {
    super.onDestroy();
    getApplicationContext().startService(new Intent(getApplicationContext(), BackgroundService.class));
}
person rafaelje    schedule 04.10.2017
comment
спасибо за ваш ответ, но он не работает, служба закрывается, как только приложение закрывается - person user8515823; 04.10.2017
comment
Да, вы не можете поддерживать эту службу, вам нужно перезапустить службу снова, и для этого вам нужно добавить Override onDestroy в свой класс службы, надеюсь, это поможет вам! - person rafaelje; 04.10.2017
comment
да, я сделал тот же метод ondestroy, я перезапустил свою службу, но все равно служба закрывается с закрытием приложения - person user8515823; 04.10.2017
comment
О, я вижу, вам нужна дополнительная информация о Manifest. Если вы хотите, вы можете проверить этот проект, в котором я работаю, служба flyve-inventory-agent и манифест с простым примером - person rafaelje; 05.10.2017