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

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

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


person ProNeticas    schedule 09.03.2011    source источник
comment
Вот вам developer.android.com/reference/android/location/   -  person Nathan Schwermann    schedule 09.03.2011


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

Последнее примечание:

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

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

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

person devunwired    schedule 09.03.2011
comment
@Wireless-Designs, вы Gem, я думал, что это так, я все еще изучаю НАМЕРЕНИЕ для Droid, ваш ответ очень информативен - спасибо за ваше время, добрый сэр! - person ProNeticas; 09.03.2011
comment
Без проблем. Если этот ответ в конечном итоге решит вашу проблему, не стесняйтесь принять его. Ваше здоровье! - person devunwired; 09.03.2011
comment
Я сделаю, я хотел сначала проверить;) - person ProNeticas; 09.03.2011
comment
Спасибо за это. Я пытался сделать это с помощью службы и диспетчера предупреждений, но безуспешно. Это именно то, что я искал. - person AaronSzy; 25.03.2011

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

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

person tasomaniac    schedule 01.08.2013
comment
Итак, как вы предлагаете, чтобы это работало? Установить геозону для текущего местоположения пользователя, скажем, в радиусе 50 м, затем при выходе установить новую геозону с таким же радиусом и таким образом отслеживать движение пользователя? - person Pierre; 20.05.2018
comment
@Pierre: если вы хотите обновить на основе изменения местоположения, посмотрите developers.google.com/android/reference/com/google/android/gms/ - person serv-inc; 13.07.2018
comment
Спасибо @serv-inc, я использовал именно это. И для экономии заряда батареи я регистрирую только местоположения с точностью ниже 40 м, я также добавил статическую переменную, называемую предыдущим местоположением, если новое местоположение находится дальше 40 м от предыдущего местоположения, я регистрирую его, иначе нет. - person Pierre; 14.07.2018