Я пытаюсь запустить службу, которая выполняет некоторые операции с местоположением в фоновом режиме, только если эта служба не запущена. Теперь я устанавливаю будильник для этой службы каждый раз, когда вхожу в приложение, но я хочу запустить службу, потому что это первый раз, когда я открываю приложение или если служба была остановлена из-за чего-то.
Это мой код для службы:
public class LocationAlertReceiver extends BroadcastReceiver {
private Context context;
public LocationAlertReceiver() {
}
public static void enableBootReceiver(Context context) {
ComponentName receiver = new ComponentName(context, LocationAlertReceiver.class);
PackageManager packageManager = context.getPackageManager();
packageManager.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// Some operations....
}
public void setAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, LocationAlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar c = Calendar.getInstance();
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), Calendar.getInstance().getTimeInMillis() + 60 * 1000, pendingIntent);
}
public void cancelAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, LocationAlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmManager.cancel(pendingIntent);
}
}
И в основном действии у меня есть функция, которая устанавливает будильник:
private void startLocationService() {
LocationAlertReceiver locationAlertReceiver = new LocationAlertReceiver();
locationAlertReceiver.setAlarm(this.getContext());
LocationAlertReceiver.enableBootReceiver(this.getContext());
}
EDIT (добавлен класс LocationService) Это класс обслуживания:
public class LocationService extends Service {
private LocationAlertReceiver locationAlertReceiver;
public void onCreate() {
super.onCreate();
if (locationAlertReceiver == null) {
locationAlertReceiver = new LocationAlertReceiver();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
locationAlertReceiver.setAlarm(LocationService.this);
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Извините, потому что я не знаю, ясно ли я выразился. Спасибо