如何在appwidgetprovider的Pending Intent调用的活动中检测appWidgetId

时间:2012-05-24 20:11:40

标签: android android-widget android-pendingintent

我有appwidgetprovider类,如下所示,它调用一个活动来打开

for (int widgetId : allWidgetIds) {

        remoteViewParent = new RemoteViews(context.getPackageName(),R.layout.widget_initial_layout);

        try{
            Intent clickIntent = new Intent(context,Activity.class);//same class name is passed to give the call to itself
            clickIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                            //PASSING ID HERE
            clickIntent.putExtra("checkintent", ""+widgetId);


            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);
            remoteViewParent.setOnClickPendingIntent(R.id.widget_img_logo, pendingIntent);

            appWidgetManager.updateAppWidget(widgetId, remoteViewParent);

        }catch (Exception e) {
        }

    }

我希望活动在我的Activity类中接收widgetId,所以我通过putExtra()传递它 在此之后,我逐个添加3小部件,当我点击主屏幕上的任何小部件时,我只是获取最后一个小部件的ID(通过我的意图)

有没有办法区分添加的特定小部件的点击次数,是否可以解决任何问题?

长期以来一直抓住这个。

我希望这适用于Android 2.2及更高版本。 欢迎任何建议

1 个答案:

答案 0 :(得分:0)

比较PedingIntent时不考虑额外内容,因此即使您更改附加内容也会获得相同的意图。 FLAG_UPDATE_CURRENT表示当前的PendingIntent已更新,因此您只能获得最后一个ID。如果您想要可靠地传递ID,您必须将其放入Intent的数据中,然后您将能够为不同的ID获得不同的PendingIntent。像这样:

Uri data = Uri.withAppendedPath (Uri.parse("mywidget://mywidget/widgetId/#"),
                String.valueOf(widgetId));
intent.setData(data);

然后从Intent的数据中提取ID以区分小部件。