2012-11-24 29 views
0

我需要一種方法來確定哪個AppWidgetProvider對於配置活動中當前的 窗口小部件是活動的。我目前的解決方案在某些設備上導致NullException ,appWidgetInfo.provider以某種方式爲空。AppWidgetProvider,如何確定特定窗口小部件的AppWidgetProvider

是否有更好的方法來確定哪個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

我實際上有同樣的問題,因爲我也需要確定實際的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)); 

希望它可以幫助你!

+0

啊,太好了......謝謝 – user634545

相關問題