私はプログラミングの初心者Androidで、自分のアカウントについてISPからいくつかのデータを取得できるウィジェットを作ろうとしています。方法は不明ですが、それを行う方法はたくさんありますが、いくつかのこと-ユーザーがログインとパスワードを入力する必要があるconfigureアクティビティを備えたウィジェットがあります。ウィジェットはSharedPerferencesにデータを保存し、ウィジェットを更新するときは、サービスを使用してAsyncTaskを開始し、ISPから取得します。アカウントデータ。ここで、ウィジェットをクリックしてアクティビティを開始したいと思います。このサイトで見つけたアドバイスをすべて試しましたが、ウィジェットはアクティビティを開始できません。ここに配置された別のウィジェットに基づくウィジェット https ://github.com/Arturus/MetrikaWidget 。ウィジェットをクリックしてアクティビティを開始するために何をどこで変更すればよいかわかりません。ありがとうございます。
更新: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);
}
ウィジェットAppWidgetProvider
クラスのonUpdate()
メソッドでこのスニペットを使用します。
@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(...);
サービスを開始しようとする試み。
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);
「別のウィジェットからウィジェットを作成する」については知りません。これは私の知識ではありませんが、独自のウィジェットを作成することをお勧めします。
それとは別に、ウィジェットからのアクティビティの呼び出しには PendingIntent を使用する必要があります
ここにそれを行う簡単な例があります
Intent iSetting = new Intent(this, MyConfig.class);
PendingIntent piSetting = PendingIntent.getActivity(this, 0, iSetting, 0);
views.setOnClickPendingIntent(R.id.IdComponent, piSetting);