25

私はAndroidのプログラミングの初心者であり、ISPから自分のアカウントに関するデータを取得できるウィジェットを作成しようとしています。それを行う方法は不明なことがたくさんありますが、私はいくつかのことをしました-ユーザーがログインとパスワードを入力する必要があるconfigureアクティビティを備えたウィジェットがあります。ウィジェットはデータをSharedPerferencesに保存します。ウィジェットを更新するときは、サービスを使用してAsyncTaskを開始し、ISPからアカウントデータを取得します。ウィジェットをクリックしてアクティビティを開始したいと思います。このサイトで見つけたすべてのアドバイスを試しましたが、ウィジェットがアクティビティを開始できません。ここに配置された別のウィジェットに基づく私のウィジェットhttps://github.com/Arturus/MetrikaWidget。ウィジェットをクリックしてアクティビティを開始するために、何をどこで変更する必要があるのか​​わかりません。ありがとう。

UPDATE:私の更新関数。PendingIntentを配置することをお勧めします

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
    Log.d(TAG, "onUpdate");

    for (int appWidgetId : appWidgetIds)
    {
        updateAppWidget(context, appWidgetManager, appWidgetId);
    }

    /* An updateAppWidget functions looks like as:

    Intent intent = new Intent(context, UpdateWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
    context.startService(intent);
    */

    Intent intent = new Intent(context, DetailedStatActivity.class);
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.layout);

    views.setOnClickPendingIntent(R.id.layout, pendingIntent);

    ComponentName componentName = new ComponentName(context.getPackageName(), WidgetProvider.class.getName());

    appWidgetManager.updateAppWidget(componentName, views);
}
4

3 に答える 3

62

onUpdate()ウィジェットAppWidgetProviderクラス のメソッドでこのスニペットを使用します。

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
    Intent configIntent = new Intent(context, Activity.class);

    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);

    remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}     

これwidgetlayoutはウィジェット レイアウトの名前で、R.id.widget親レイアウト ID です。

編集
これで、質問に追加したコードが表示されます。次のことを行います。

PendingIntent.getActivity(context, 0, configIntent, 0);

(その開始のアクティビティ) の代わりに

PendingIntent.getService(...);

サービスを開始します。頑張ってください。

参照:
doityourselfandroid.com

こんにちはandroid.com

于 2012-07-19T05:01:55.350 に答える
10
Intent inet = new Intent(your_action);
inet.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntentNetworkInfo = PendingIntent.getActivity(context, 2, 
            inet, Intent.FLAG_ACTIVITY_NEW_TASK);
remoteViews.setOnClickPendingIntent(you_component_when_the_user_pressing_this_activity_should_start, pIntentNetworkInfo);
于 2012-07-19T05:04:47.040 に答える
2

「別のウィジェットからウィジェットを作成する」についてはわかりません。これは私の知識ではありませんが、独自のウィジェットを作成することをお勧めします。

それとは別に、ウィジェットからの呼び出しアクティビティはPendingIntentを使用する必要があります

これを行う簡単な例を次に示します

Intent iSetting = new Intent(this, MyConfig.class);
PendingIntent piSetting = PendingIntent.getActivity(this, 0, iSetting, 0);
views.setOnClickPendingIntent(R.id.IdComponent, piSetting);

または、このリンクこのリンクを見る必要があるかもしれません

于 2012-07-19T04:55:17.927 に答える