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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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