Главная » Разработка для Android » Использование оповещений о близости нахождения

0

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

ПРИМЕЧАНИЕ

Внутри Android могут использоваться различные Источники данных для определения местоположения, в зависимости от того, как близко вы находитесь от границы целевой области. Это позволяет свести к ми- нимуму денежные затраты и потребление энергии, так как оповещения будут генерироваться на основе данных о расстоянии от вас до внешней границы целевой области.

Чтобы  установить  оповещения о близости  нахождения к данной  об- ласти, нужно выбрать центральную  точку (используя параметры  широты и долготы), радиус вокруг этой точки и время ожидания для генерации оповещения. Оповещение вызовется, если устройство пересекло заданную границу, неважно, в каком направлении.

При срабатывании оповещения о близости  нахождения генерируют Намерение, чаще всего это Широковещательное намерение. Чтобы  указать, какое именно Намерение необходимо генерировать,  используйте класс PendingIntent, который описывает Намерение в виде ссылки на метод, как показано во фрагменте  кода:

Intent intent = new Intent(MY_ACTION);

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, -1, intent, 0);

В следующем примере устанавливается оповещение о близости нахож- дения, которое всегда остается  актуальным и срабатывает  в момент при- ближения устройства  к цели ближе чем на 10 метров:

private static String TREASURE_PROXIMITY_ALERT = "com.paad. treasurealert";

private void setProximityAlert() {

String locService = Context.LOCATION_SERVICE; LocationManager locationManager;

locationManager = (LocationManager)getSystemService(locService);

double lat = 73.147536;

double lng = 0.510638;

float radius = 100f; // метры

long expiration = -1; // время действия не истекает

Intent intent = new Intent(TREASURE_PROXIMITY_ALERT);

PendingIntent proximityIntent = PendingIntent.getBroadcast(this, -1, intent,

0);

locationManager.addProximityAlert(lat, lng, radius, expiration, proximityIntent);

}

Когда LocationManager обнаруживает, что вы пересекли границу радиуса (то есть переместились внутрь  указанного  радиуса близости  или наобо- рот), упакованный объект Intent сработает  с дополнительными ключами в зависимости от того, какое значение у LocationManager.KEY_PROXIM- ITY_ENTERING — true или false.

Для обработки оповещений о близости нахождения нужно создать объ- ект BroadcastReceiver, как показано в листинге 8.3.

Листинг 8.3. Создание объекта BroadcastReceiver для приема оповещений о близости  нахождения

public class ProximityIntentReceiver extends BroadcastReceiver {

@Override

public void onReceive (Context context, Intent intent) { String key = LocationManager.KEY_PROXIMITY_ENTERING;

Boolean entering = intent.getBooleanExtra(key, false);

[ . . . выполнение действий, связанных с обнаружением близости нахождения .]

}

}

Чтобы начать отслеживать оповещения о близости  нахождения,  заре- гистрируйте приемник:

IntentFilter filter = new IntentFilter(TREASURE_PROXIMITY_ALERT);

registerReceiver(new ProximityIntentReceiver(), filter);

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии