Intereting Posts
Динамическая установка фиксированной высоты для просмотра сетчатой ​​сетки Как получить прозрачный фон версии webView for 4.0 Может ли libuv (async lib) node.js работать на Apple IOS / Android? Вытеснить мою деятельность на передний план? Как изменить положение пунктов меню на панели действий Операции пользовательского интерфейса (настройка альфа, установочные поля и т. Д.) Очень медленная на 4.4.4 по сравнению с 4.0.3 Как сохранить несколько объектов с помощью библиотеки PARSE от android Android: вставка записи sqlite с колонкой AUTOINCREMENT Scrollview выходит за пределы экрана Тайм-аут активности для HistoryRecord Как сохранить вид в действии на Android Аудио не будет воспроизводиться на Android с помощью телефонной затычки, но отлично работает на iOS Ошибка эмулятора Android: «Системный пользовательский интерфейс остановлен» Какой самый простой способ определить, подключено ли устройство Android Wear к телефону? Как я могу позиционировать навигацию по списку действий на правой стороне?

Скрыть виджет приложения в зависимости от уровня 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 и выше будет иметь один виджет с изменяемым размером.