18

ウィジェットのすべての ACTIVE インスタンスのリストを取得しようとしています。私の AppWidgetProvider の OnUpdate メソッドでは、次のことを行っています。

// Get all ids
ComponentName thisWidget = new ComponentName(context, this.getClass());
int[] lastWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

問題は、ウィジェットをホーム画面に追加してから削除した場合でも、getAppWidgetIds が、削除したばかりのウィジェットの ID を含むリストを返すことです。

ホーム画面でアクティブなウィジェットのみの ID を取得する方法はありますか?

4

1 に答える 1

13

私もこれに遭遇しました。getAppWidgetIds は、そのウィジェット プロバイダーに関連付けられたすべての ID を常に取得するように単純にプログラムされていると思います。これを解決するには、メソッドに ID を保存し、AppWidgetProvideronUpdateのメソッドでそれを削除して、ウィジェット ID を共有設定に保存する必要がありました。onDelete

public class MyProvider extends AppWidgetProvider {
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
        // Update your widget as normal

        // If the Id isn't already saved to your db/app preference, save it now
    }

    public void onDeleted (Context context, int[] appWidgetIds) {
        // Remove each id passed in through appWidgetIds 
        // "un-save" them from your db or app preferences
    }
}
于 2012-10-09T12:20:44.170 に答える