0

クリックしたときにアクティビティを起動するAppウィジェットを実装しました。 WidgetProviderウィジェットからアクティビティを起動できない場合があります。

onUpdate()方法:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 

    final int N = appWidgetIds.length; 
    for (int i=0; i<N; i++) { 
     int appWidgetId = appWidgetIds[i]; 

     RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidgetprovider_layout); 
     // ....update updateViews here 
     appWidgetManager.updateAppWidget(appWidgetId, updateViews); 

     Intent onClickedIntent = new Intent(context,MyActivity.class); 
     PendingIntent pi = PendingIntent.getActivity(context, 0, onClickedIntent, 0); 
     updateViews.setOnClickPendingIntent(R.id.myView, pi); 

     appWidgetManager.updateAppWidget(appWidgetId, updateViews); 

    } 
} 

それはウィジェットがホーム画面に追加した後に期待どおりに動作。

ただし、後でアクティビティを再度開始することはできません。ウィジェットを削除してもう一度追加する必要があります。

どうすれば修正できますか?助けてください。

答えて

0

私はこのようにそれを行うだろう:私はよく分からない

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidgetprovider_layout);  
    Intent onClickedIntent = new Intent(context,MyActivity.class); 
    PendingIntent pi = PendingIntent.getActivity(context, 0, onClickedIntent, 0); 
    updateViews.setOnClickPendingIntent(R.id.myView, pi); 

    for (int i=0; i<appWidgetIds.length; i++) { 
     appWidgetManager.updateAppWidget(appWidgetIds[i], updateViews); 
    } 
} 

ことの一つは、super.onUpdate()への呼び出しです。私自身のウィジェットコードはそれを持っておらず、うまく動作しているようです...必要かどうかわかりません。

このリファクタリングで問題が解決するかどうかわかりません。

+0

Thx dave.c、それは私にとってはうまくいくようです。主なポイントは、forループの外側にあるupdateViews.setOnClickPendingIntent()のコードを移動することです。 – chow

+0

まだ問題があります:(Nexus Oneが2.3.3を更新した後にもっと深刻になる! – chow

0

私はこれが2年遅れていることを知っていますが、今日まで私は私が間違っていたことを知っていると思っています。主なキーはRemoteViewsクラスの使用に焦点を当てることだと思います。これらのオブジェクトは、別のプロセスを実行するための一連の命令セットとして準備します。 "on click pending intent"をに設定してからをupdateAppWidgetメソッドに送信する必要があります。そのメソッドへの最初の呼び出しでは、「myView」オブジェクトがクリックされることはありません。コードは次にonClickトリガーを設定し、updateAppWidgetをもう一度呼び出します。 1つはうまくいくはずですが、2つのインテントが区別されているか曖昧な場合にのみ混乱するような問題があります。もし私が正しいのであれば、最初にupdateAppWidgetを呼び出してから、RemoteViewsオブジェクトを作成するたびに必ずonClickトリガーを設定してください。とにかく願っています。

関連する問題