BroadcastReceiver для местоположения

Я знаю, приемник BroadcastReceiver часы для текста, телефон события, и т. д... но можете ли вы запустить LocationServices как службу и событие на основе местоположения?

например, вы находитесь рядом с определенной точкой GPS, и телефон уведомляет вас.

2 ответов


Я думаю, что вы ищете что-то вроде этого. Существует версия 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 С тем же намерением, и он получит обновления местоположения для обработки. И, конечно, оставьте это себе!--2--> вокруг, потому что вам нужно позвонить manager.removeUpdates(launchIntent) в какой-то момент!

Конечная Нота:

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

вы хотите значительно уменьшить частоту вверх по обновлениям положения С или большим параметром minTime или minDistance для того чтобы позволить расположение службы для отдыха. Эта функция также должна быть прикреплена к пользовательским настройкам, чтобы они могли включать / отключать ваше приложение от отслеживания местоположения в фоновом режиме.

надеюсь, что это поможет!


этот вопрос более 2 лет, но теперь есть очень простой и эффективный способ сделать это. Понятие называется геозоны. Вы можете узнать это более подробно ниже:

http://developer.android.com/training/location/geofencing.html