2013-09-25 106 views
0

我想允許添加一個Widget的小部件的一個實例,我試圖把一個布爾標誌,我有:如何只允許Android的

內WidgetConfig:

public final static String ADDED_KEY = "IsAdded"; 
public static boolean isAdded = false; 

的onCreate(內側WidgetConfig)

isAdded = prefs.getBoolean(ADDED_KEY, false);  
    if (isAdded){ 
     Toast.makeText(this.getApplicationContext(), "Only one Widget", Toast.LENGTH_SHORT).show(); 
     finish(); 
    } 
[...] 
editor.putBoolean(ADDED_KEY, true); //disable adding here 
editor.commit(); 

內部WidgetProvider延伸的AppWidgetProvider

public void onDisabled(Context context) { 

    super.onDisabled(context); 
    [...] 
//cancel alarm 
    configEditor.putBoolean(WidgetConfig.ADDED_KEY, false); //enable adding here 
    configEditor.commit(); 
} 

public void onDeleted(Context context, int[] appWidgetIds){ 
super.onDeleted(context, appWidgetIds); 
//I should not need this if there is only one widget 
} 

但它並不總是工作。 我該怎麼辦?謝謝

+0

isAdded = prefs.getBoolean(ADDED_KEY,false); <---您是否知道如果沒有值從首選項中檢索,那麼這裏的「false」只是defaultValue? – bofredo

+0

這是開始配置小部件時的第一個命令 如果第一次添加小部件isAdded沒有值,那麼默認值爲false 在將值更改爲true後添加爲「//禁用此處添加「 ,然後當我刪除小部件(onDisabled)時有望返回false,有時它有效,有時不起作用 – user1719863

回答

1

直接從AppWidgetManager獲取添加的小部件的ID,並檢查已在配置活動中添加了多少個小部件。

int[] ids = AppWidgetManager.getInstance(getApplicationContext()).getAppWidgetIds(
      new ComponentName(getApplicationContext(), YOUR_WIDGET.class)); 

    if(ids.length > 0){ 
     //do not add the widget 
    }else{ 
     //add the widget 
    } 

這就是我通常會檢查是否有任何我的小部件的實例。

+0

返回舊的窗口小部件ID。當您移除小部件並嘗試獲取應用程序小部件ID時,它會返回已移除的小部件ID,因此此邏輯無法按預期工作。 –