我将联系人图片动态添加到小部件中。这是我这部分的代码:

for (int x = 0; x < this.appWidgetIds.length; x++){
        int id = this.appWidgetIds[x];
        RemoteViews rv = new RemoteViews(this.context.getPackageName(), R.layout.widget);
        for (int i = 0; i < maxCount; i++){
            String lookupKey = sortedItems.get(i).getLookupKey();
            Tools.ToLog("LOOKUPKEY=" + lookupKey);
            Bitmap bmp = Contact.getContactPicture(this.context, lookupKey);
            if (bmp != null){
                Intent intent = new Intent(context, ContactsWidget.class);
                intent.setAction(ACTION_WIDGET_RECEIVER);
                intent.putExtra(ITENT_LOOKUPKEY, lookupKey);
                Tools.ToLog("LOOKUPKEY - IDENT=" + intent.getStringExtra(ITENT_LOOKUPKEY));

                RemoteViews itemView = new RemoteViews(this.context.getPackageName(), R.layout.widget_itemview);
                itemView.setImageViewBitmap(R.id.widget_ImageView, bmp);
                PendingIntent actionPendingIntent = PendingIntent.getBroadcast(this.context, 0, intent, 0);
                itemView.setOnClickPendingIntent(R.id.widget_ImageView, actionPendingIntent);
                rv.addView(R.id.widgetContainer, itemView);
            }
        }
        appWidgetManager.updateAppWidget(id, rv);
    }


我从日志上的意图测试了Lookupkey和lookupkey,它在这一方面起作用(变量lookupKey == intent.getStringExtra(ITENT_LOOKUPKEY))。现在,由于我单击了联系人图片而收到意图时,意图的额外信息始终是相同的。不管我单击了哪个联系人图片。这是接收代码:

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
        String lookupKey = intent.getStringExtra(ITENT_LOOKUPKEY);
        Toast.makeText(context, "Lookup Key: " + lookupKey, Toast.LENGTH_SHORT).show();
        //Contact.openContact(this.context, lookupKey);
    }
    super.onReceive(context, intent);
}


它始终是第一个添加的联系人中的lookupKey。在第一个功能中添加另一个联系人之前,我是否必须以某种方式清除意图,或者出了什么问题?

最佳答案

您只有一个PendingIntent

引用文档:


  如果创建的应用程序以后重新检索相同类型的PendingIntent(相同的操作,相同的Intent操作,数据,类别和组件以及相同的标志),则它将收到表示相同令牌的PendingIntent(如果该令牌仍然有效)


由于每次都具有相同的操作(getActivity())和相同的Intent布线件,因此只有一个PendingIntent

而不是将操作设置为ACTION_WIDGET_RECEIVER,而应使其对于循环中创建的每个操作都是唯一的。

关于android - 小部件-接收时 Intent 保持不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6572404/

10-10 09:54