BroadcastReceiver для местоположения - PullRequest
15 голосов
/ 09 марта 2011

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

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

Ответы [ 2 ]

35 голосов
/ 09 марта 2011

Я думаю, что вы ищете что-то вроде этого. Существует версия 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, чтобы позволить службе определения местоположения отдыхать. Эту функцию также следует прикрепить к предпочтениям, управляемым пользователем, чтобы они могли включать / отключать ваше приложение от отслеживания местоположения в фоновом режиме.

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

21 голосов
/ 01 августа 2013

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

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

...