当我期待get the extras back in startActivityForResult时,这个问题在某种程度上与问题有关,但现在我面临另一个挑战。
我订阅了ProximityAlerts,我已经明确构建了Intent以包含一些Extras。但是当我得到这项服务时,额外的东西不在那里。
这里的答案是工作代码:
Intent intent = new Intent(this, PlacesProximityHandlerService.class);
intent.setAction("PlacesProximityHandlerService");
intent.putExtra("lat", objPlace.getLat());
intent.putExtra("lon", objPlace.getLon());
intent.putExtra("error_m", objPlace.getError()+ALERT_RANGE_IN_METERS);
PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);
LocationUtils.addProximity(this, objPlace.getLat(), objPlace.getLon(),objPlace.getError()+ALERT_RANGE_IN_METERS, -1, sender);
文档说param PendingIntent to be sent for each location update
答案 0 :(得分:42)
由于某些未指明的原因,只有在您设置了某些操作时才会传递额外内容,例如setAction(“foo”)。只有在未设置FLAG_ONE_SHOT时,CommonsWare引用的内容仅在获取PendingIntent实例时适用。这可以通过PendingIntent.get ... factory方法中的requestCode参数来修复。虽然文档说它当前没有使用,但在区分PendingIntents时它实际上需要计算。
在您的情况下,除了一些虚拟动作字符串之外,您不需要设置任何其他内容。 LocationManagerService重新使用您已预订接近警报的PendingIntent,并且仅在电话进入或退出警报范围时才添加标记。
答案 1 :(得分:23)
如果您有多个未完成的PendingIntents
,则需要确保基础Intents
的内容不同于其他内容。否则,Android将继续重复使用您为第一个PendingIntent
创建的第一个Intent
,并始终使用该Intent
个附加内容。
例如,您可以通过setAction()
添加一项独特的操作 - 这不会改变您的Intent
路由(因为您指定了该组件),但它会使您的Intents
不同。
答案 2 :(得分:7)
我遇到了这个问题,我发现的解决方案非常简单,但我无法解释它为何有效。
最初我的未决意图看起来像这样:
notificationIntent = new Intent(ctx, FragmentTabsPager.class);
notificationIntent.setData(Uri.parse("content://com.sbs.mobile.workorder.WorkOrder/notes/"));
notificationIntent.putExtra("NOTIFICATION", true);
notificationIntent.putExtra(WorkOrder.WorkOrderColumns.WORKORDERID, submessage);
在创建这样的意图时,单击通知时不会传递额外内容,附加地图在接收活动中将为空。我对初始化notificationIntent的行进行了以下更改:
notificationIntent = new Intent().setClass(ctx, FragmentTabsPager.class);
现在,在接收活动中填充了额外内容。再说一次,我无法解释为什么会这样,但它解决了我的问题。
答案 3 :(得分:2)
这些答案都不适合我。将操作设置为特定字符串是第一次使用,但如果您稍后使用相同的通知和不同的附加功能,则它将无效。我用随机生成的方法替换了setAction
方法的字符串,它没有任何问题:
intent.setAction(new Random().nextInt(50) + "_action");
nextInt()
答案 4 :(得分:1)
关键是将额外内容和独特操作设置为意图 调用之前
PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);
如果您在>强调>>之后将额外内容和操作设置为意图,则无效。 这将不工作:
Intent intent;
PendingIntent sender=PendingIntent.getService(this, 0,
intent=new Intent(this, PlacesProximityHandlerService.class), 0);
intent.setAction("PlacesProximityHandlerService");
intent.putExtra("lat", objPlace.getLat());