Appwidget在多个实例中单击意图

时间:2017-02-09 08:56:12

标签: android android-appwidget

我有一个链接到我的应用中的活动的小部件。我在PendingIntent

中链接了AppWidgetProvider
public class SampleWidget extends AppWidgetProvider {
    @Override
    public void onUpdate([…]) {
        RemoteViews views = […]

        for (int appWidgetId : appWidgetIds) {
            final Intent intent = new Intent(context, SomeActivity.class);
            intent.putExtra(EXTRA_KEY, extraValue);
            final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            views.setOnClickPendingIntent(R.id.view_name, pendingIntent);
        }
    }
}

extraValue基于内容窗口小部件正在显示,因此可以由某些窗口小部件共享,但并不总是由所有窗口小部件共享。我已尝试在此处记录指定的值,我可以确认正确的值存储正确的小部件。当我点击任何小部件中ID为View的{​​{1}}时,我会从已启动的活动中创建的第一个小部件(自手机重新启动)中获取值,不是我点击的特定小部件的价值。似乎view_name可能存在某种单一实例,并且使用View为其分配多个PendingIntent仅导致第一个使用?有没有办法在没有活动代码的情况下将数据附加到Intent,以确定基于调用小部件显示什么?

1 个答案:

答案 0 :(得分:0)

正如pskink在对原始问题的评论中所指出的那样,问题是由0requestCode参数的PendingIntent.getActivity()值使用而引起的。用唯一ID(例如小部件的ID)替换它可以解决问题:

final PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, 0);

这是因为requestCode用作标识符来区分各个PendingIntent