Скрыть виджет приложения в зависимости от уровня API

Я создал три виджета приложений с разными размерами для предыдущих версий Honecomb Android и один изменяемый размер прокручиваемого виджета listview для Honeycomb и позже.

Поскольку виджеты предлагают ту же функциональность, и та, которая предназначена для Honeycomb, а затем изменяет размер, я хотел бы удалить другие версии виджета на уровне API 12 или более поздней версии. Возможно ли это как-то?

Насколько я могу судить, не существует способа отключить виджет от регистрации в AppWidgetService, если он может найти файл ресурсов AppWidgetProviderInfo. Поэтому кажется, что я могу включать только виджеты в более поздние версии, но не исключать версии, определенные в папках xml, которые ориентированы на более ранние версии API.

Если бы это был единственный виджет приложения, в котором были реализации до HC или HC, вы могли бы объединить их в один AppWidgetProvider и использовать res/xml-v11/ res/xml/ для разных метаданных.

Единственный способ, с помощью которого я могу придумать свой сценарий, – отметить некоторые из AppWidgetProviders как отключенные в манифесте ( android:enabled="false" ), а затем включить и отключить поставщиков при первом запуске вашего приложения На android.os.Build.VERSION с помощью setComponentEnabledSetting() и setComponentEnabledSetting() , чтобы дать вам правильный набор. Поскольку на Android 3.1+ пользователю нужно будет запустить одно из ваших действий, чтобы иметь возможность добавлять виджет приложения, во всяком случае, у вас есть хотя бы точка входа для применения этой логики.

OP уже получил свое решение, но для остальных из нас мы можем использовать значения bool в xml и устанавливать их по-разному в разных каталогах ресурсов.

Итак, ваш AndroidManifest выглядит примерно так:

 <receiver android:label="@string/app_widget_small" android:enabled="@bool/is_pre_api_11"> <!-- App Widget Stuff Here --> </receiver> <receiver android:label="@string/app_widget_large" android:enabled="@bool/is_pre_api_11"> <!-- App Widget Stuff Here --> </receiver> <receiver android:label="@string/app_widget_resizeable" android:enabled="@bool/is_post_api_11"> <!-- App Widget Stuff Here --> </receiver> 

И в /res/values/attrs.xml :

 <resources> <bool name="is_pre_api_11">true</bool> <bool name="is_post_api_11">false</bool> </resources> 

Затем в /res/values-v11/attrs.xml :

 <resources> <bool name="is_pre_api_11">false</bool> <bool name="is_post_api_11">true</bool> </resources> 

Теперь ваш API 10 и ниже будет иметь два виджета приложений (малые и большие), а API 11 и выше будет иметь один виджет с изменяемым размером.