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_name
的 View
时,我从创建的第一个小部件中获取值(因为 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
个体的标识符。
我的应用程序中有一个 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_name
的 View
时,我从创建的第一个小部件中获取值(因为 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
个体的标识符。