Я искал много, но я до сих пор не могу понять решение этойнужен андроид служба для запуска всегда
У меня есть сервис с обратным Start_Sticky в onStartCommand, и она начнет себя в методе OnDestroy обслуживания. Я, хотя этого было бы достаточно, потому что моя служба была бы остановлена от пользователя, поэтому будет вызван метод onDestroy. или остановлен андроидом, а затем из-за Start_Sticky, андроид воссоздает его после его убийства, но андроид не запускает мой сервис после его убийства.
поэтому я использовал класс AlarmManager для регистрации широковещательного приемника, а затем начал свою службу в методе onReceive, но, похоже, после того, как телефон перейдет в спящий режим, метод onReceive снова не будет вызван. Я даже попытался использовать wakeLock
в любом случае вопрос, как сделать запуск службы всегда или воссоздать себя после очистных, как телеграмм или Instagram услуг
это моя служба:
public final class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
//some stuff
AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent ii = new Intent(getApplicationContext(), MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 12345, ii, 0);
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT)
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1 * 60 * 1000, pi);
else
am.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1*60*1000, pi);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
public synchronized void onDestroy() {
startService(new Intent(ACTION_MAIN).setClass(context, MyService.class));
super.onDestroy();
}
}
и вот мой приемник:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
//WakeLocker.acquire(context);
context.startService(new Intent(ACTION_MAIN).setClass(context, MyService.class));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
AlarmManager am2 =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 12345, i, 0);
am2.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1*60*1000, pi);
}
else
{
AlarmManager am2 =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 12345, i, 0);
am2.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1*60*1000, pi);
}
}
}
Edit: хорошо я получил более простой вопрос почему этот простой служ ce не воссоздается после того, как андроид убил его? Я запускаю службу, используя startService в действии, но примерно через 20 минут моя служба исчезает в запущенных задачах ... почему?
public class NotificationsService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onDestroy() {
super.onDestroy();
}
}
Я смущен тем, что вы пытаетесь сделать здесь. У вас должен быть класс, который не указан в списке, который настраивает alarmManager и запускает будильник, класс MyReciever выберет это и запустит службу. Я не понимаю, почему класс MyReciever и Service Class имеют в них AlarmManager? Вы также не должны использовать один и тот же идентификатор для двух разных PendingIntents - я бы вообще удалил AlarmManager из MyService, если только я не упустил что-то в вашем вопросе – EnduroDave
да, вы что-то упустили ... с тех пор, как набор андроид-kitkatRepeating метод alarmmanager неточен поэтому я обрабатываю его, установив еще один сигнал тревоги в методе onReceive для имитации setRepeating. и, как вы видите, есть, если так, у меня нет двух ожидающих намерений с аналогичными идентификаторами. –
@CommonsWare Я искал много, и я не получил никакого ответа, хотя, возможно, у меня может помочь, спасибо –