我們希望通過代碼啓用或禁用小部件。當我們說 「禁用」時,我們表示在應用 中註冊的小部件在 嘗試向其主屏幕添加小部件時不應顯示在用戶可用的小部件列表中。 這個問題已經被問到,很遺憾,很多次沒有 答案。動態啓用或禁用小部件不起作用
有一個響應由戴安娜Hackborn到這表明,有可能使用 軟件包管理器禁用部件單獨 小部件問題:
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(new ComponentName("com.example.android.apis", ".appwidget.ExampleBroadcastReceiver"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, // or DISABLED
PackageManager.DONT_KILL_APP);
然而,這是行不通的。小部件組件在小部件列表中仍將出現 。可能是AppWidgetService(位於Android源代碼的\ src \ base \ services \ java \ com \ android \ server上的Base.git中的 )加載了可用小部件列表,並緩存了可用小部件的此列表 。如果是這種情況,那麼上述 代碼啓用或禁用小部件組件將在 設備重置後工作,因爲不會有緩存;它不是。
我也嘗試尋找重寫某些方法的 AppWidgetProvider,如篩選出任何事件。我不認爲 這會去任何地方,因爲填充 列表的AppWidgetService使用軟件包管理器來查找在啓動時捕獲 ACTION_APPWIDGET_UPDATE操作的所有組件,並且在添加軟件包時添加了 (即新應用程序是安裝)。從此列表中刪除提供商的唯一時間是 在ACTION_PACKAGE_REMOVED廣播上。 因此,無論組件的啓用/禁用狀態如何,我都會查看實際的 列表活動,當用戶長按 單擊桌面並添加時,將顯示從Launcher應用程序中顯示的實際 列表活動一個widget:AppWidgetPickActivity Settings.GIT com.android.settings。這不幸的是,從AppWidgetService填充列表 直接,而無需爲 組件的啓用狀態的任何過濾: 無效putInstalledAppWidgets(列表項){安裝 清單= mAppWidgetManager.getInstalledProviders();putAppWidgetItems(installed,null,items); }
我很想看看有沒有人克服了這個障礙。也許我是 去錯誤的方式。我想要的只是能夠從用戶可用的小部件列表中刪除 小部件,當他們嘗試 將小部件添加到其主屏幕時。
3年後,這個問題的任何更新? – 2014-03-29 21:12:15