Appwidget 跨多个实例的点击意图

Appwidget click intents across multiple instances

我的应用程序中有一个 link 到 activity 的小部件。我 link 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是基于小部件显示的内容,所以它可以被一些小部件共享,但并不总是被所有小部件共享。我已经尝试在此处记录分配的值,并且可以确认为正确的小部件存储了正确的值。但是,当我在 any 小部件中点击 ID 为 view_nameView 时,我从创建的第一个小部件中获取值(因为 phone reboot) 在启动的 Activity 中,而不是我点击的特定小部件的值。似乎 View 可能有某种单一实例,并且使用 setOnClickPendingIntent() 向其分配多个 PendingIntent 会导致仅使用第一个?有没有办法在 Activity 中没有代码的情况下将数据附加到 Intent,以确定根据调用小部件显示的内容?

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

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

这是因为 requestCode 被用作区分 PendingIntent 个体的标识符。