从主屏幕动态删除Android Widget

时间:2011-11-29 07:31:51

标签: android android-widget

我需要在从配置活动中按回来后删除主屏幕窗口小部件实例,因为我希望它完全删除,而不是由于issue 2539而留在“边缘”。所以这些修复中的一个很好:

  1. 修复问题2539,让widget实例在主屏幕和“limbo”
  2. 中正常消失
  3. 让程序员通过AppWidgetHost执行此操作,并使用正确的id引用主屏幕(使此安全漏洞得到证明)。 (有趣的尝试描述了here
  4. 现在是否有可能?

1 个答案:

答案 0 :(得分:1)

我自己解决了,只处理了两个布尔标志。 这是我在扩展AppWidgetProvider

的类中所做的
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    SharedPreferences settings = context.getSharedPreferences(SHARED_PREFERENCES, 0); 

    for(int widgetId:appWidgetIds)
    {   
        boolean configured = settings.getBoolean(CONFIGURED_PREFERENCE+widgetId, false);    //In order to skip initial UpdateService
        boolean widget= settings.getBoolean(WIDGET_PREFERENCE+widgetId, false);
         if(!widget && configured) continue;   // In order to skip phantom Widgets update


    if(!configured)
    {   

     SharedPreferences.Editor editor = settings.edit();
     editor.putBoolean(CONFIGURED_PREFERENCE+widgetId, true);
           editor.commit();
        }
    else
    {    Intent updateService=new Intent(context, UpdateService.class);          
        updateService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,widgetId);
         context.startService(updateService);
    }   


  }

}

为了完整的解释,我写了整个程序on my blog