Я думаю, что вы ищете что-то вроде этого. Существует версия 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
с тем же действием Intent, и он будет получать обновления местоположения для обработки. И, конечно же, держите этот PendingIntent
рядом, потому что в какой-то момент вам нужно будет вызвать manager.removeUpdates(launchIntent)
!
Последнее примечание:
Поскольку это звучит так, как будто вы пытаетесь реализовать регулярные обновления местоположения, когда ваше приложение не находится на переднем плане, имейте это в виду. Если вы не хотите, чтобы ваше приложение называлось «убийцей батареи», будьте предельно осторожны с реализацией этой функции.
Вы захотите значительно уменьшить частоту обновлений местоположения с помощью большого параметра minTime или minDistance, чтобы позволить службе определения местоположения отдыхать. Эта функция также должна быть прикреплена к настройке, контролируемой пользователем, чтобы они могли включать/отключать ваше приложение от отслеживания местоположения в фоновом режиме.
Надеюсь, это поможет!
person
devunwired
schedule
09.03.2011