0

クリックしたときにアクティビティを起動するアプリ ウィジェットを実装しました。

onUpdate()の方法WidgetProvider:

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);

     }
}

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

しかし、時々、アクティビティを再び起動できなくなります! ウィジェットを削除して、再度追加する必要があります。

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

4

2 に答える 2

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);
     }
}

よくわからないことの1つは、への呼び出しsuper.onUpdate()です。私自身のウィジェットコードにはそれがなく、うまく機能しているようです...それが必要かどうかはわかりません。

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

于 2011-02-03T20:47:08.643 に答える
0

私はこれが2年遅れていることを知っていますが、私が何を間違っていたかを知っていると思う今日まで、私もこれに苦労しました。主な鍵は、RemoteViewsクラスの使用に焦点を当てることだと思います。これらのオブジェクトは、別のプロセスが従うための一種の命令セットとして準備します。「クリック保留中のインテント」の設定は、前に行う必要がありますそれをupdateAppWidgetメソッドに送信するので、そのメソッドへの最初の呼び出しは、クリックに対して「myView」オブジェクトを準備しません。次に、コードはonClickトリガーを設定し、updateAppWidgetをもう一度呼び出します。1つは機能するはずですが、2つのインテントが明確またはあいまいな場合については、コードが予期せず機能する理由を理解するために読みたいと思うかもしれない、全体的に紛らわしい主題があります。私が正しい場合、重要な点は、最初にupdateAppWidgetを呼び出さないことです。その後、RemoteViewsオブジェクトを作成するときは、必ずonClickトリガーを設定してください。とにかくそう願っています。

于 2013-01-14T06:09:23.653 に答える