我有一些奇怪的行为,我只能假设是因为我正在使用的待定意图。
方案
我有一个小工具(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按钮内容发生变化时,我需要取消之前的意图。 这是问题吗?难道我做错了什么 ?如何取消旧的意图,我需要重新创建然后取消它?
感谢您的时间。
答案 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的最后一个参数