【问题标题】:how to detect appWidgetId in activity called from Pending Intent of appwidgetprovider如何在从 appwidgetprovider 的 Pending Intent 调用的活动中检测 appWidgetId
【发布时间】:2012-05-24 20:11:40
【问题描述】:

我有 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 在我的 Activity 类中接收 widgetId,所以我通过 putExtra() 传递它 在此之后,我一个一个地添加3 小部件,当我单击主屏幕上的任何小部件时,我只会获得最后添加的小部件的 ID(通过我的意图)

有没有办法区分对添加的特定小部件的点击,任何解决方法?

很久以前就开始关注这个了。

我想要这个用于 android 2.2 及更高版本。 欢迎任何建议

【问题讨论】:

    标签: android android-widget android-pendingintent


    【解决方案1】:

    在比较 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 以区分小部件。

    【讨论】:

    • 这里的"mywidget" 代表什么,是静态的吗,我正在尝试使用这个Uri data = Uri.withAppendedPath (Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)),String.valueOf(widgetId)); 没有运气
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多