Мы хотели бы включить или отключить виджеты с помощью кода. Когда мы говорим, что «отключить» мы имеем в виду, что виджет, зарегистрированный в приложении , не должен отображаться в списке виджетов, доступных пользователю, когда они пытаются добавить виджет на свой домашний экран. Этот вопрос был задан, к сожалению, много раз без ответа .Динамическое включение или отключение виджета не работает
Был один ответ Диэнном 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-источнике Base.git в \ src \ base \ services \ java \ com \ android \ server), который загружает список доступных виджетов, кэширует этот список доступных виджетов. Если это так, то приведенный выше код , который включает или отключает компонент виджета, будет работать после сброса устройства , потому что кеша не будет; Это не.
Я также попытался переопределить некоторые методы приложения AppWidgetProvider, например, для фильтрации любых событий. Я не думаю, что это будет куда угодно, потому что AppWidgetService, который заполняет список , использует диспетчер пакетов, чтобы найти все компоненты, которые улавливают действие ACTION_APPWIDGET_UPDATE при запуске и когда добавлен пакет (т.е. новое приложение установлен). Единственный раз, когда провайдер удаляется из этого списка, является передача ACTION_PACKAGE_REMOVED. Так что, если провайдеры всегда будут там, независимо от состояния включения/отключения компонента, я просмотрел действительный список , который показан в приложении Launcher, когда пользователь long- нажимает рабочий стол и добавляет виджет: AppWidgetPickActivity в Settings.GIT в com.android.settings. Это, к сожалению, заполнит список непосредственно из AppWidgetService, без какой-либо фильтрации для статуса позволили компонента: недействительных putInstalledAppWidgets (Список элементов) { List установлен = mAppWidgetManager.getInstalledProviders(); putAppWidgetItems (установлено, null, items); }
Мне очень хотелось бы узнать, преодолел ли кто-либо этот барьер. Возможно, я ошибочно. Все, что я хочу, - это удалить виджет из списка виджетов, доступных пользователю, когда они попытаются установить , чтобы добавить виджет на главный экран.
Любое обновление с этим вопросом после того, как 3-х лет? –