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