0

configure アクティビティで、現在のウィジェットに対してアクティブな AppWidgetProvider を特定する方法が必要です。私の現在の解決策では、一部のデバイスで NullException が発生し、appWidgetInfo.provider が何らかの形で null になります。

どの AppWidgetProvider が特定の appWidgetId に対応しているかを判断するより良い方法はありますか?

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(widgetId);

Intent intent = new Intent();
intent.putExtra(
    AppWidgetManager.EXTRA_APPWIDGET_ID, 
             widgetId);
intent.setAction(RemoteWidgetViewsFactory.KEY_WIDGET_SETTING_REFRESH);

String appWidgetProviderName = appWidgetInfo.provider.getClassName();
if(appWidgetProviderName.equals(WidgetProvider.class.getName())) {
    intent.setClass(context, WidgetProvider.class);
}
else if(appWidgetProviderName.equals(WidgetProviderLarge.class.getName())) {
    intent.setClass(context, WidgetProviderLarge.class);
}

sendBroadcast(intent);
4

1 に答える 1

1

私は実際に同じ問題を抱えていたので、実際の AppWidgetProvider クラスを決定する必要もありました。あなたの質問は私を助けました、そして私はおそらくあなたを助けることができます. このようなメソッドを実装するだけで、AppProvider クラスごとにコードを記述する必要はありません。

    private static Class<?> getAppWidgetProviderClass(Context context, int appWidgetId){
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId);
    String appWidgetProviderName = appWidgetInfo.provider.getClassName();
    Class<?> myProvider = null;
    try {
        myProvider = Class.forName(appWidgetProviderName);
    } catch (ClassNotFoundException cnf){
        Log.e("myProviderClass","Class:" + appWidgetProviderName + " not found!");
    }
    return myProvider;
}

クラス定義に使用した後 意図:

Intent myIntent = new Intent(context, getAppWidgetProviderClass(context, appWidgetId));

それがあなたを助けることを願っています!

于 2012-12-19T17:13:59.997 に答える