Я пытаюсь запустить фоновую службу в android приложении. Я попробовал стандартный способ сделать это и множество других настроек. Проблема заключается в том, что когда приложение закрывается из последних приложений, служба уничтожается. Это происходит только на китайских Android устройствах, таких как Oppo, Vivo, Xiomi и др. c. Он отлично работает на всех других брендах.
Я пробовал следующие решения.
Отмена действия OnStartCommand()
для возврата START_STICKY
. Это все еще не перезапускает активность после закрытия приложения, как и ожидалось.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
Добавил приложение к исключениям экономии заряда батареи, чтобы оно не закрывало ее для экономии заряда батареи в режиме DOZE
.
Предоставил приложению разрешение на Auto-Start
из настроек безопасности телефона.
Запустил службу как служба переднего плана, включая постоянное уведомление.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String input = intent.getStringExtra("inputExtra");
createNotificationChannel();
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Foreground Service")
.setContentText(input)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentIntent(pendingIntent)
.build();
startForeground(1, notification);
//do heavy work on a background thread
//stopSelf();
return START_NOT_STICKY;
}
Реализован подход Alarm Manager к запуску службы после ее уничтожения в onTaskRemoved()
и onDestroy()
методах обслуживания.
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"
android:stopWithTask="false" />
@Override
public void onTaskRemoved(Intent rootIntent){
Log.d("Service:","I am being closed!");
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
super.onTaskRemoved(rootIntent);
}
Я также пытался использовать диспетчер рассылки, чтобы запустить службу, получающую рассылку от активности, когда она закрыта.
<receiver
android:name=".SensorRestarterBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:label="RestartServiceWhenStopped"
/>
public class SensorRestarterBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(SensorRestarterBroadcastReceiver.class.getSimpleName(), "Service Stops!");
context.startService(new Intent(context, MyService.class));;
}
}
Однако служба не запускается снова на этих китайских устройствах специально. В то время как фоновые сервисы Whatsapp, Facebook и некоторых известных приложений возвращаются через несколько минут после закрытия приложения. Пожалуйста, предложите правильный способ достижения этого.
Я пробовал решения, предоставленные на Фоновая служба не перезапускается после убийства в oppo, vivo, mi android версии 7.1.2 , как также описано над. Это не решает мою проблему.