множественное оповещение о близости на основе услуги - PullRequest
0 голосов
/ 13 марта 2011

У меня есть мое приложение, которое использует ProximityAlerts для запуска, когда пользователь входит на назначенные радиостанции.

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

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

Любая помощь, пожалуйста?Я видел людей, использующих радиовещательный приемник, но в моем случае вместо этого я использую услугу.

Ответы [ 4 ]

2 голосов
/ 22 декабря 2011

Для создания приложения Android с оповещением о близости основными компонентами являются Broadcast Receiver, Intent, PendingIntent и AddProximityAlert.

Рабочий процесс должен быть следующим: -

  1. Зарегистрировать IntentFilter с помощью широковещательного приемника
  2. Создать Intent
  3. Получить PendingIntent, который будетвыполнить трансляцию
  4. Установить оповещение о близости

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

.....
IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT + uniqueID);
.....
Intent mIntent = new Intent(PROX_ALERT_INTENT + uniqueID);
......

Для получения дополнительной информации вы можете прочитать мой пост по теме

1 голос
/ 27 июля 2011

Здесь нужно сделать пару замечаний:

  1. Используйте широковещательный приемник для обработки PendingIntent, который запускает для бесконтактного оповещения.
  2. При создании PendingIntent для бесконтактного оповещения PendingIntent должен быть уникальным для каждого местоположения. Самый простой способ сделать это - создать уникальную строку действия для каждого местоположения.

Вот пример PendingIntent, который вы можете создать для бесконтактного оповещения:

int uniqueID = <unique_id_for_location>;
String intentAction = "PROXIMITY_ALERT." + uniqueID;
PendingIntent proximityIntent = PendingIntent.getBroadcast(getApplicationContext(),
    uniqueID, new Intent(intentAction), PendingIntent.FLAG_CANCEL_CURRENT);

Затем добавьте оповещение близости для вашего местоположения (я полагаю, вы знаете, как выполнить эту часть).

Затем зарегистрируйте приемник вещания, чтобы обработать строку действия намерения, которую вы создали для вашего pendingIntent:

IntentFilter filter = new IntentFilter(intentAction);
registerReceiver( new ProximityItentReceiver(), filter );

Здесь ProximityIntentReceiver - это имя созданного вами класса BroadcastReceiver.

0 голосов
/ 18 января 2012

Все дело в request_id в pendingIntent, вы назначаете requesttid для pendingIntent..а если ваша первая служба использует идентификатор запроса 1, значит, а вторая служба использует идентификатор запроса 2..Так что первая служба не будет уничтожена и службапроисходит одновременно ..

число, которое я использовал в качестве идентификатора запроса в ожидающем намерении

 int COUNT=Integer.parseInt(some_text.getText().toString());
  if(COUNT==1)
 {
 PendingIntent  proxi_pi=PendingIntent.getService(class_name.this,COUNT,service_class_intent,Intent.FLAG_ACTIVITY_NEW_TASK);
   location_manager.addProximityAlert(location.getLatitude(), location.getLongitude(),   radius, -1, proxi_pi);
  }
  else if(COUNT==2)
  {
 PendingIntent   proxi_pi=PendingIntent.getService(class_name.this,count,service_class_intent,Intent.FLAG_ACTIVITY_NEW_TASK);
    location_manager.addProximityAlert(location.getLatitude(), location.getLongitude(),    radius, -1, proxi_pi);
  }
  else if(COUNT==so..on){
    }

я надеюсь, что это поможет вам ..

0 голосов
/ 12 апреля 2011

Рассматривали ли вы использование широковещательного приемника, а затем запуск услуги с получателя?

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

Исходный код доступен через github (см. Нижнюю часть этого поста) Gaunt Face - множественные оповещения о сближении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...