基于服务的多重接近警报

时间:2011-03-12 22:54:09

标签: android service

我有我的应用程序,当用户进入指定的无线电时,它会使用ProximityAlerts启动。

我的proximityAlert启动了一项服务,该服务显示Toast告诉我,我已进入指定的活动广播。

问题是,我无法让我的应用程序触发多个已注册的位置,它只对最后一个已注册的位置做出反应并忽略之前注册的事件

请帮忙吗?我见过人们使用广播接收器,但在我的情况下,我使用的是服务。

4 个答案:

答案 0 :(得分:2)

要构建具有接近警报的Android应用程序,主要成分是Broadcast Receiver,Intent,PendingIntent和AddProximityAlert。

工作流程应如下: -

  1. 向广播接收器注册IntentFilter
  2. 创建意图
  3. 获取将执行广播的PendingIntent
  4. 设置近距离警报
  5. 为了让您的应用程序触发多个已注册的位置,您必须首先使用正确的IntentFilter注册广播接收器,并为每个接近警报创建相应的意图。请记住对每个位置使用唯一的意图操作,如下所示

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

    有关详细信息,请参阅主题

    上的my post

答案 1 :(得分:1)

这里有几点要点:

  1. 使用广播接收器处理触发proximityAlert的PendingIntent。
  2. 为proximityAlert创建PendingIntent时,每个位置的PendingIntent必须唯一。最简单的方法是为每个位置创建一个唯一的操作字符串。
  3. 以下是您可以为proximityAlert创建的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);
    

    然后,为您的位置添加proximityAlert(我假设您知道如何执行此部分)。

    接下来,注册您的广播接收器以处理您为pendingIntent创建的意图操作字符串:

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

    此处,ProximityIntentReceiver是您创建的BroadcastReceiver类的名称。

答案 2 :(得分:0)

您是否考虑过使用广播接收器然后从接收器启动服务?

当我第一次使用它们时,我发现系统缓存了一些结果,因此必须设置一个ID(文档声称不使用它)。通过这样做,意图没有被缓存,我得到了适当的信息来处理多个接近警报。

源代码可通过github获取(请参阅本文末尾)Gaunt Face - Multiple Proximity Alerts

答案 3 :(得分:0)

所有关于pendingIntent中的request_id,你为pendingIntent ...分配了一个请求,如果你的第一个服务使用请求id 1意味着第二个服务使用请求id 2 ..那么第一个服务不被杀死和服务同时发生..

我在待定意图中用作请求ID的计数

 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){
    }

我希望这可以帮助你..