Как узнать местоположение устройства каждые 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