Нужно сделать неубиваемый сервис.
1. Создаешь сервис, который будет запускать AlarmManager
1.1 Класс сервиса:
public class MessageService extends Service {
public static PendingIntent pendingIntent = null;
private void serviceMessageStart() {
Intent alarmIntent = new Intent(MessageService.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(MessageService.this, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
if (pendingIntent != null) {
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 30 * 1000, 15 * 60 * 1000, pendingIntent);
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
super.onCreate();
serviceMessageStart();
}
public void onDestroy() {
super.onDestroy();
}
}
1.2 Создаешь Receiver, на который будет ссылаться AlarmManager после выполнения:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Выполняем свои действия
}
}
1.3 Регистрируем Service и Receiver в Manifest:
<application
<service
android:name="ИМЯ.ПАКЕТА.ПРИЛОЖЕНИЯ.MessageService"
android:enabled="true"
android:exported="false">
</service>
<receiver android:name="ИМЯ.ПАКЕТА.ПРИЛОЖЕНИЯ.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
2. MainActivity. В манифесте мы прописали, чтобы сервис запускался автоматически, как только устройство будет включено. Так же мы уже сделали его неубиваемым. Теперь сделаем активацию сервиса, если он не был запущен:
public boolean isServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
if(!isServiceRunning(MessageService.class)) {
startService(new Intent(this, MessageService.class));
}
//...
}
Готово :)