Android: запускать AlertReceiver, только если он еще не запущен - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь запустить службу, которая выполняет некоторые операции с местоположением в фоновом режиме, только если эта служба не запущена. Теперь я устанавливаю будильник для этой службы каждый раз, когда вхожу в приложение, но я хочу запустить службу, потому что это первый раз, когда я открываю приложение или если служба была остановлена ​​из-за чего-то.

Это мой код для службы:

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;
}

}

Извините, потому что я не знаю, ясно ли я выразился. Спасибо

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