Оповещения о приближении срабатывают, даже если я выхожу из установленного местоположения GPS, и периодически появляются каждые 2 или 1 минуту

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

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

И часть PendingIntent выглядит так:

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

PendingIntent pIntent = PendingIntent.getBroascast (контекст, 0, намерение, PendingIntent.FLAG_CANCEL_CURRENT);

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

Теперь код BroadcastReceiver,

класс ProxyReceiver расширяет BroadcastReceiver {@Override public void onReceive (контекст контекста, намерение намерения) {
логическое 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
 }

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

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

  1. Дома я установил местоположение gps с радиусом 10 м. Он дал мне уведомление, что "пользователь находится в домашней зоне"

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

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

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

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

Спасибо.


person poddroid    schedule 14.12.2010    source источник
comment
Ребята .... есть догадки или идеи, почему это происходит?   -  person poddroid    schedule 15.12.2010
comment
привет @poddroid: мы также делаем то же самое приложение для оповещения о сближении. здесь мы изо всех сил пытаемся получить сообщение о выходе, когда мы уходим из этого места. пожалуйста, если вы знали, помогите мне. это почтовый идентификатор [email protected]   -  person tamil    schedule 27.03.2013


Ответы (1)


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» уникальным целым числом для PendingIntent «home» и PendingIntent «office». Затем зарегистрируйте каждый PendingIntent с его собственным значением широты / долготы / радиуса в вашем addProximityAlert().

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

person Nolnoch    schedule 17.11.2011
comment
как мне получить этот код запроса в onReceiver BroadcastReceiver, чтобы выяснить, какой из них был вызван? - person urSus; 03.04.2013
comment
Если намерения, которые вы зарегистрировали с помощью PendingIntents, не идентичны, вы можете использовать методы доступа для анализа намерения, переданного в качестве второго аргумента onReceive (). Намерения можно различать по действию, данным, типу, классу и категориям. - person Nolnoch; 03.04.2013
comment
да, у меня, должно быть, были некоторые старые ожидающие намерения, которые были зарегистрированы до этого знания кода запроса, а дополнительные в намерениях были нулевыми, но теперь он работает, спасибо - person urSus; 03.04.2013