如何取消Android小部件中的待处理意图?

时间:2012-02-25 08:53:26

标签: android android-intent widget android-pendingintent

我有一些奇怪的行为,我只能假设是因为我正在使用的待定意图。

方案

我有一个小工具(4x1),有4个按钮。在窗口小部件的onUpdate中,我为每个按钮添加了一个待处理的意图。我的意图使用bundeled参数触发一个服务,并根据此参数启动一些东西。我附上了这样的意图:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

Bundle b = new Bundle();
b.putString("myVariable", someVariable);

Intent intent = new Intent(context, AppStarterService.class);
intent.putExtras(b);

PendingIntent pendingIntent = PendingIntent.getService(context, buttopnPosition, intent, 0);
views.setOnClickPendingIntent(R.id.btnOne, pendingIntent);

问题

代码工作正常,直到用户决定更新按钮的内容。然后,完成新的Pending Intent。因此,当我再次按下按钮时,有时它仍会执行旧的意图,而不是新的意图。我不知道如何更好地解释这一点。让我们说我的第一个意图是参数是“TestOne”,在我更新之后,新意图有参数“TestX”。当用户点击按钮时,在我的服务上我得到了意图额外的“TestOne”而不是“TestX”。所以,我的猜测是,不知何故,当widget按钮内容发生变化时,我需要取消之前的意图。 这是问题吗?难道我做错了什么 ?如何取消旧的意图,我需要重新创建然后取消它?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

即使使用FLAG_UPDATE_CURRENT,我仍然遇到此问题,尝试每次都定义一个不同的 requestCode ,如下所示:

private static int request = 0;
...
PendingIntent pendingIntent = PendingIntent.getService(context, request++, intent, 0);

因此,每次创建新的PendingIntent时,都会使用新的requestCode,至少在课堂上使用。

我希望它有所帮助。

答案 1 :(得分:0)

我认为你想将标志http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT设置为PendingIntent.getService的最后一个参数