0

我的小部件每 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 的循环内)

提前致谢!

问候,罗德里戈。

4

1 回答 1

0

声明 .setOnClickPendingIntent() 时首先添加到 Intent

Uri data = Uri.withAppendedPath(
                    Uri.parse(URI_SCHEME + "://widget/id/")
                    ,String.valueOf(appWidgetId));
                intent.setData(data);

这样每个小部件都会获得一个唯一的 ID,并且不会弄乱!

于 2012-07-05T17:56:46.993 回答