我的小部件每 3 分钟从 Internet 获取一次数据,其中一些直接显示在小部件上,而另一些则存储在 SharedPreferences 中,因此当用户点击小部件时,信息会显示为对话框。当运行多个小部件时,无论我单击哪个小部件,日志都会显示 appWidgetId始终来自其中一个
我的问题似乎是我声明小部件的 setOnClickPendingIntent() 的方式。我在服务内部执行此操作,就在获取数据之前,并且由于每个(小部件)AlarmManager 都运行相同的服务,因此每个小部件都从上次运行的服务中获取 PendingIntent。
public class WidgetService extends Service
{
@Override
public void onStart(Intent intent, int startId)
{
Intent intentUmbrales = new Intent(context, LaunchUmbralesDialog.class);
intentUmbrales.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent pendingIntentUmbrales = PendingIntent.getActivity(context,0,intentUmbrales,0);
// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
// views.setOnClickPendingIntent(R.id.energia_widget, pendingIntentImei);
views.setOnClickPendingIntent(R.id.imageLogo_widget, pendingIntentUmbrales);
//..then I fetch data, store the rest in SharedPreferences and update widget remoteViews
}
}
我怎样才能避免这种情况?如何为每个小部件制作一个单独的“按钮”并让它们重叠?另请注意,我已经尝试在 AppWidgetProvider 的 onUpdate() 方法中声明这些 PendingIntents(在该方法给出的数组中每个 appWidgetId 的循环内)
提前致谢!
问候,罗德里戈。