Chcielibyśmy włączyć lub wyłączyć widżety za pomocą kodu. Kiedy mówimy "wyłącz", oznacza to, że widżet zarejestrowany w aplikacji nie powinien się pojawiać na liście widżetów dostępnych dla użytkownika, gdy próbuje on dodać widżet do ich ekranu głównego. To pytanie zostało zadane, niestety, wiele razy bez odpowiedzi .Dynamiczne włączanie lub wyłączanie widżetu nie działa
Była jedna odpowiedź przez Dianne Hackborn do oddzielnego widget pytanie, który sugerował, że można było użyć menedżera pakietów wyłączyć widżety:
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);
To jednak nie działa. Element widget nadal będzie wyglądał na liście widgetów na . Być może AppWidgetService (znajduje się w źródle bazowym Androida na serwerze \ src \ base \ services \ java \ com \ android \ server), które ładuje listę dostępnych widżetów, buforuje tę listę dostępnych widżetów. Jeśli tak było, to powyższy kod , który włącza lub wyłącza komponent widgetu, działałby po zresetowaniu urządzenia , ponieważ nie byłoby pamięci podręcznej; to nie.
Próbowałem również sprawdzić nadpisanie niektórych metod AppWidgetProvider, takich jak filtrowanie wszelkich zdarzeń. Nie sądzę, to pójdzie w dowolnym miejscu, ponieważ AppWidgetService, która zapełnia listę, używa Menedżera pakietów, aby znaleźć wszystkie składniki, które złapie akcji ACTION_APPWIDGET_UPDATE podczas uruchamiania i gdy pakiet jest dodane (tj. Nowa aplikacja jest zainstalowany). Jedyny przypadek usunięcia z tej listy operatora dotyczy transmisji ACTION_PACKAGE_REMOVED. Biorąc pod uwagę, że dostawcy zawsze będą tam obecni, niezależnie od stanu włączonego/wyłączonego komponentu , przejrzałem rzeczywistą aktywność listy, która jest wyświetlana z aplikacji Launcher, gdy użytkownik długo- klika pulpit i dodaje widget: AppWidgetPickActivity w Ustawienia.GIT w com.android.settings. To, niestety, zapełnia listę bezpośrednio z AppWidgetService bez filtrowania dla statusu umożliwiło komponentu: void putInstalledAppWidgets (elementy listy) { liście Zainstalowane = mAppWidgetManager.getInstalledProviders(); putAppWidgetItems (zainstalowane, puste, elementy); }
Chciałbym zobaczyć, czy ktoś pokonał tę przeszkodę. Być może jestem dzieje się w niewłaściwy sposób. Wszystko czego chcę, to móc usunąć widget z listy widżetów dostępnych dla użytkownika, gdy próbuje on dodać widżet do ich ekranu głównego.
Każda aktualizacja tej kwestii po 3 latach? –