2012-04-20 37 views
4

これは私を夢中にしています。私はApp-widgetを開発しました。すべてがうまくいきます。Android AppWidgetの設定を起動するには別のアクティビティからのアクティビティ?

ホーム画面にウィジェットが追加され、美しく動作するたびに起動する設定アクティビティがあります。

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

「アクティビティについて」には、「アクティビティについて」を起動したウィジェットIDの設定アクティビティを起動するためのボタンがあります。理由は私がそれをやりたいのは、ユーザーが私のウィジェットのインスタンスのコンテンツを削除したり、追加したりせずに(構成アクティビティを起動するために)構成できるようにするためです。

構成アクティビティーは仕事をするためにAppWidgetManager.EXTRA_APPWIDGET_IDを必要とする(この特定のwidgetIdがためのユーザ設定を保存する)ので、私は別のアクティビティから呼び出す「Mたとき、私は何とかこの余分を渡す必要があります。明らかにこれを行うと思います:

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

ここで私の質問はどこですか?ウィジェット(配列)を取得する方法は100万種類ありますが、「アクティビティについて」を起動した特定のウィジェットを取得する方法についての単なる手がかりはありません

解決策を見つけるのに時間がかかります、何か価値がある。前もって感謝します。

p.s.私の母国語ではないので、私の英語を許してください...

+0

私はバッジの何かを受ける価値があります。それは私が最も難しいアンドロイドのappwidgetsの質問に尋ねたようだ... – Christos

+0

あなたは約あなたの活動を開始する意図にウィジェットのIDを入れてみませんか?だから、IDを知っているとそれを使用して構成を開始することができます – zapl

+0

これは私が達成しようとしているものですが、私はウィジェットIDを見つけることができませんでした。これはウィジェットプロバイダのonUpdateメソッド内の1つの場所にのみ存在します。この事実とCory Chaltronの答えに基づいて、私は最終的にその仕事をしました。受け入れられた答えと私の答えにコメントを見てください。どうもありがとうございました。 – Christos

答えて

1

どのようにウィジェットビューを設定していますか?私は、アクティブなウィジェットを反復処理し、そこに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); 
} 
+0

私はあなたの答えを受け入れています。私の目が開き、正しい方向に向いています。しかし、ユーザーが複数のウィジェットインスタンスを実行している場合、これを機能させるためには、「キャッチ」が必要です。これは、誰かが完全な解決策を手に入れたいと思っている場合に備えて、私が自分の答えを投稿している理由です。ありがとうございました。 – Christos

+0

RemoteViewsにはfindViewByIdメソッドがありません。また、setOnClickPendingIntent –

1

ここで私の問題に対する解決策があります。

ウィジェットプロバイダの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) 

が、私はそれを受け入れていないです。だからここにコードがあります。助けてくれてありがとう...

+2

によってクリック数が管理されます。また、aboutIntent.setData(aboutIntent.toUri(Intent.URI_INTENT_SCHEME));も機能します(追加情報もエンコードします)。 – Karakuri

+0

あなたはこのようにUriに解析する必要があります。aboutIntent.setData(Uri.parse(aboutIntent.toUri(Intent.URI_INTENT_SCHEME))); ' –

関連する問題