Я думаю, что вы ищете что-то вроде этого. Существует версия LocationManager.requestLocationUpdates()
, которая принимает PendingIntent
в качестве параметра, и это намерение может использоваться для запуска BroadcastReceiver
. Этот код зарегистрирует настраиваемую трансляцию для обновления местоположения.
Intent intent = new Intent("UNIQUE_BROADCAST_ACTION_STRING_HERE");
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
long minTime; //This should probably be fairly long
float minDistance; //This should probably be fairly big
String provider; //GPS_PROVIDER or NETWORK_PROVIDER
PendingIntent launchIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
manager.requestLocationUpdates(provider, minTime, minDistance, launchIntent);
Тогда вам просто нужно зарегистрировать ваш BroadcastReceiver
с тем же действием Намерение, и он получит обновления местоположения для обработки. И, конечно же, держите это PendingIntent
рядом, потому что вам нужно будет позвонить manager.removeUpdates(launchIntent)
в какой-то момент!
Заключительное примечание:
Поскольку похоже, что вы пытаетесь внедрить регулярные обновления местоположения, пока ваше приложение не находится на переднем плане, имейте это в виду. Если вы не хотите, чтобы ваше приложение называлось аккумуляторной батареей, будьте предельно осторожны с реализацией этой функции.
Вы захотите значительно уменьшить частоту обновлений местоположения с помощью большого параметра minTime или minDistance, чтобы позволить службе определения местоположения отдыхать. Эту функцию также следует прикрепить к предпочтениям, управляемым пользователем, чтобы они могли включать / отключать ваше приложение от отслеживания местоположения в фоновом режиме.
Надеюсь, что поможет!