Предупреждающие сигналы срабатывают, даже когда я выхожу из заданного местоположения GPS и происходит каждые 2 или 1 минуту рекурсивно - PullRequest
0 голосов
/ 14 декабря 2010

Я недавно начал работать над приложением оповещений о близости. Это в основном меняет профиль мелодии звонка (просто вибрировать или мелодию изначально) в зависимости от местоположения пользователя GPS. Я закончил часть кодирования. При «входе» и «выходе» срабатывают оповещения о сближении, и выполняется код в зарегистрированном BroadcastReceiver. До этого момента все нормально. Фактическая проблема заключается в следующем (с моими примерами строк кода)

Я зарегистрировал один вещательный приемник для двух намеренных действий. Эти намеренные действия объявлены, как показано ниже, public static final String INTENT_ACTION1 = "org.droidmania.action. PROXIMITYALERT "; public static final String INTENT_ACTION2 = "org.droidmania.action. PROXIMITYALERT2 ";

И часть PendingIntent - как,

private void setProximityAlerts (String intentAction) { Намерение намерение = новое намерение (); intent.setAction (intentAction); // в случае вызова из HomeActivity intentAction будет INTENT_ACTION1, иначе INTENT_ACTION2

PendingIntent pIntent = PendingIntent.getBroascast (context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

locationManager.addProximityAlert (широта, долгота, vRadius, -1, pIntent); }

Теперь код BroadcastReceiver,

класс ProxyReceiver расширяет BroadcastReceiver { @Override public void onReceive (контекстный контекст, намерение намерения) {
boolean isEnter = intent.getBooleanExtra (KEY_PROXIMITY_ENTERING, false);

if(isEnter){
  **//if user is in Home location**
   if(intent.getAction().equals(INTENT_ACTION1)){  
     give the notification that user is in home area
  }
 **//if user is in Office location**
 if(intent.getAction().equals(INTENT_ACTION2)){
     give the notification that user is in office area
 }

} еще { // если пользователя нет дома
если (intent.getAction (). равно (INTENT_ACTION1)) {
дать уведомление, что пользователь находится вне дома } // если пользователя нет в офисе если (intent.getAction (). (равно INTENT_ACTION2)) { дать уведомление, что пользователь находится вне офиса } } }

Я тестировал это на своем мобильном устройстве,

  1. В доме я установил местоположение GPS с радиусом 10м. Он дал мне уведомление, что «пользователь находится в домашней зоне»

  2. Оно показывало сообщение "пользователь вышел из домашней зоны", когда я был вне этого радиуса.

  3. Теперь, когда я нахожусь в офисе, я устанавливаю местоположение GPS с радиусом 5 метров. Таким образом, он дал мне уведомление, что «пользователь находится в офисе». Но здесь я сталкиваюсь с фактической проблемой , так как она показывает и сообщения «Вход в домашнюю зону» и «Вход в офис» и «Выход из домашней зоны» и «Выход из офиса» для каждых 2 1 минута перерыва. Я не понимаю, почему это происходит. (Даже я не двигаюсь вокруг после того, как я установил местоположение офиса GPS ... просто оставаясь там в той же точке ...... сидя на своем рабочем месте в офисе ... )

    Я что-то упускаю или даю здесь что-то еще? Почему оповещения происходят из-за близости дома, так как я давно не выходил из дома?

    Ребята, пожалуйста, помогите мне (я уже потратил 2 недели времени :-(). Спасибо за помощь.

Спасибо.

1 Ответ

2 голосов
/ 18 ноября 2011

ProximityAlerts хранятся с параметрами (широта, долгота, радиус, PendingIntent), где PendingIntent является его идентификатором.

Чтобы дифференцировать PendingIntents, используйте аргумент requestCode PendingIntent.

PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);

Таким образом, в параметрах getBroadcast вопроса (context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT) замените «0» уникальным целым числом для «home» PendingIntent и «office» PendingIntent. Затем зарегистрируйте каждый PendingIntent с его собственным широтой / долготой / радиусом в вашем addProximityAlert().

Если не сделать каждый PendingIntent уникальным, ProxAlert1 (lat1, lon1, rad1, PendInt1) и ProxAlert2 (lat2, lon2, rad2, PendInt1) занимают одно и то же пространство предупреждений в перспективе системы. Таким образом, оба будут запущены в обоих местах. То есть вы всегда входите и выходите одновременно.

...