AppWidgetProvider,如何确定特定小部件的AppWidgetProvider

时间:2012-11-24 11:37:11

标签: android appwidgetprovider

我需要一种方法来确定当前哪个AppWidgetProvider是活动的 配置活动中的小部件。我当前的解决方案导致NullException 在某些设备上,appWidgetInfo.provider以某种方式为空。

是否有更好的方法来确定哪个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);

1 个答案:

答案 0 :(得分: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:

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

希望它可以帮到你!