我需要一种方法来确定哪个AppWidgetProvider对于configure活动中的当前小部件是活动的。我目前的解决方案导致在某些设备上出现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);发布于 2012-12-20 01:14:00
我实际上也遇到了同样的问题,因为我还需要确定实际的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));希望能对你有所帮助!
https://stackoverflow.com/questions/13540819
复制相似问题