我有我的应用程序,当用户进入指定的无线电时,它会使用ProximityAlerts启动。
我的proximityAlert启动了一项服务,该服务显示Toast告诉我,我已进入指定的活动广播。
问题是,我无法让我的应用程序触发多个已注册的位置,它只对最后一个已注册的位置做出反应并忽略之前注册的事件
请帮忙吗?我见过人们使用广播接收器,但在我的情况下,我使用的是服务。
答案 0 :(得分:2)
要构建具有接近警报的Android应用程序,主要成分是Broadcast Receiver,Intent,PendingIntent和AddProximityAlert。
工作流程应如下: -
为了让您的应用程序触发多个已注册的位置,您必须首先使用正确的IntentFilter注册广播接收器,并为每个接近警报创建相应的意图。请记住对每个位置使用唯一的意图操作,如下所示
.....
IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT + uniqueID);
.....
Intent mIntent = new Intent(PROX_ALERT_INTENT + uniqueID);
......
有关详细信息,请参阅主题
上的my post答案 1 :(得分:1)
这里有几点要点:
以下是您可以为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){
}
我希望这可以帮助你..