Как узнать местоположение устройства каждые 5 минут, используя фоновый сервис в Android?

Я хочу получать местоположение пользователя каждые 5 минут и отображать как Toast, Какой лучший способ сделать это? Service или же IntentService? Я хочу запустить и остановить сервис по нажатию кнопки. Как это сделать?

3 ответа

Используйте службу сигнализации, чтобы вызвать службу определения местоположения, которая будет сохранять местоположение в таблице базы данных.

public static void setAlarmTimely(Context context) {
    AlarmManager alarmMgr;
    PendingIntent alarmIntent;

    alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra(IntentConstants.ALARM_INTENT, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK);
    alarmIntent = PendingIntent
            .getBroadcast(context, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK, intent, 0);
    alarmMgr.cancel(alarmIntent);

    Calendar calendar = Calendar.getInstance();
    LOGD(TAG, time + " ");
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis() + locationCaptureTime * 60 * 1000,
            5 * 60 * 1000, alarmIntent);
}

при нажатии кнопки отменить будильник

AlarmManager alarmMgr;
    PendingIntent alarmIntent;
    LOGD(TAG, "cancelling location update");
    alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra(IntentConstants.ALARM_INTENT, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK);
    alarmIntent = PendingIntent
            .getBroadcast(context, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK, intent, 0);
    alarmMgr.cancel(alarmIntent);

Используйте липкий Сервис, чтобы сделать это

 @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(LOG_TAG, "Service Started");
        try {

            }
        } catch (Exception e) {
            e.printStackTrace();
        }


        return START_STICKY;
    }

Затем позвоните в службу поддержки.

   protected void onHandleIntent(Intent intent) {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Log.e(LOG_TAG, "Awake - "+i);
              //  Log.i(LOG_TAG,"TEST ALARM TIME");
            //  do your task -- here get location 
            //change the time interval as per your need.

           handler.postDelayed(this, 300000);
            }
        },1000);
    }

Вы можете сделать это с LocationManager, вам нужно установить временной интервал.

пример

LocationManager = new LocationManager();
 locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

параметры

provider String: имя провайдера, с которым нужно зарегистрироваться

minTime long: минимальный интервал времени между обновлениями местоположения, в миллисекундах

minDistance float: минимальное расстояние между обновлениями местоположения, в метрах

слушатель LocationListener: LocationListener, чей

Метод onLocationChanged (Location) будет вызываться для каждого обновления местоположения

Вы можете прочитать больше на этой странице LocationManager

Другие вопросы по тегам