0

以下のような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) {
        }

    }

アクティビティがアクティビティ クラスで widgetId を受け取るようにしたいので、それを渡しますputExtra() 。この後、3ウィジェットを 1 つずつ追加し、ホーム画面でいずれかのウィジェットをクリックすると、最後に追加されたウィジェットの ID を取得します (経由で私の意図)

追加された特定のウィジェットのクリックを区別する方法はありますか?

長い間これに巻き込まれました。

Android2.2以上でこれが欲しい。どんな提案でも大歓迎です

4

1 に答える 1

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 を抽出して、ウィジェットを区別します。

于 2012-05-25T01:40:18.913 に答える