4

さて、これは私を夢中にさせています。アプリウィジェットを開発しました。すべてが正常に機能しています。

ホーム画面にウィジェットが追加されるたびに起動し、美しく動作する構成アクティビティがあります。ウィジェットIDなどごとにユーザー設定を保存します。

ウィジェットにはいくつかのボタンがあり、そのうちの1つは、情報についてのアクティビティ「アクティビティについて」を起動します。

[アクティビティについて]には、[アクティビティについて]を起動したウィジェットIDの構成アクティビティを起動するために使用するボタンがあります。これを実行したい理由は、ウィジェットを削除して再度追加しなくても(構成アクティビティを起動するために)、ユーザーがウィジェットの任意のインスタンスのコンテンツを構成できるようにするためです。

構成アクティビティでは、ジョブを実行するためにAppWidgetManager.EXTRA_APPWIDGET_IDが必要です(この特定のwidgetidのユーザー設定を保存します)。そのため、別のアクティビティから呼び出すときに、この余分なものを渡す必要があります。行うべき明らかな考えはこれです:

startActivity(new Intent(context,act_configure.class).putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ??? ));

今私の質問はwidgetidはどこにありますか?ウィジェットID(配列)を取得する方法は無数に見つかりましたが、「アクティビティについて」を起動した特定のウィジェットIDを取得する方法についての手がかりは1つもありませんでした。

これについての助けがあれば、私が解決策を見つけるために費やした時間は、何か価値のあるものになります。前もって感謝します。

ps英語は私の母国語ではないので、ご容赦ください。

4

2 に答える 2

3

Cory Chaltron のおかげで、ここに私の問題の解決策があります。

ウィジェット プロバイダーの onUpdate メソッドで、about アクティビティの起動を処理する保留中のインテントに渡す「一意の」インテントを作成する必要があります。Android がインテントを比較する方法のため、エクストラで WidgetID を渡すだけでは十分ではありません。一意にするために、それをデータとしてインテントに渡す必要もあります。コードは次のとおりです。

Intent aboutIntent = new Intent(cx, act_about.class);
aboutIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetIds[i]);
// Make this unique for this appWidgetId
aboutIntent.setData(Uri.withAppendedPath(Uri.parse("customuri://widget/id/"), String.valueOf(widgetID)));
PendingIntent aboutPendingIntent = PendingIntent.getActivity(cx, 0, aboutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.cmdabout, aboutPendingIntent)

私は自分の質問に答えますが、Cory の回答に基づいているため、受け入れません。助けてくれてありがとう...

于 2012-05-01T19:32:18.767 に答える
2

ウィジェット ビューをどのように設定していますか? アクティブなウィジェットを反復処理し、そこに設定を構成するアプリがRemoteViewあります。「About」ボタンにアタッチしている onClick にウィジェット ID を設定できます。

final AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
final ComponentName widgetName = new ComponentName(this, WidgetProvider.class);

final int[] widgetIds = widgetManager.getAppWidgetIds(widgetName);

for (int widgetId : widgetIds) {
    final RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);

    // This is the important part :-D
    remoteViews.findViewById(R.id.your_about_button).setOnClickListener(... a listener to start your about activity that puts the widget id in the extra like you suggest in your question ...);

    widgetManager.updateAppWidget(widgetId, remoteViews);
}
于 2012-05-01T02:26:53.603 に答える