我有一个链接到我的应用中的活动的小部件。我在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,以确定基于调用小部件显示什么?
答案 0 :(得分:0)
正如pskink在对原始问题的评论中所指出的那样,问题是由0
中requestCode
参数的PendingIntent.getActivity()
值使用而引起的。用唯一ID(例如小部件的ID)替换它可以解决问题:
final PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, 0);
这是因为requestCode
用作标识符来区分各个PendingIntent
。