Hide App Widget Depending On Api Level
Solution 1:
The OP already got his solution, but for the rest of us, we can leverage bool
values in xml and set them differently in different resource directories.
So your AndroidManifest
looks something like this:
<receiverandroid:label="@string/app_widget_small"android:enabled="@bool/is_pre_api_11"><!-- App Widget Stuff Here --></receiver><receiverandroid:label="@string/app_widget_large"android:enabled="@bool/is_pre_api_11"><!-- App Widget Stuff Here --></receiver><receiverandroid:label="@string/app_widget_resizeable"android:enabled="@bool/is_post_api_11"><!-- App Widget Stuff Here --></receiver>
And in /res/values/attrs.xml
:
<resources>
<bool name="is_pre_api_11">true</bool>
<bool name="is_post_api_11">false</bool>
</resources>
Then in /res/values-v11/attrs.xml
:
<resources>
<bool name="is_pre_api_11">false</bool>
<bool name="is_post_api_11">true</bool>
</resources>
Now your API 10 and below will have two app widgets (small and large) and API 11 and higher will have the one resizeable app widget.
Solution 2:
If it were a single app widget that had pre-HC or HC implementations, you could combine them into one AppWidgetProvider
and use res/xml-v11/
and res/xml/
to have different metadata.
The only way I can think of to handle your scenario, though, is to mark some of the AppWidgetProviders
as disabled in the manifest (android:enabled="false"
), then enable and disable your providers on the first run of your app based on android.os.Build.VERSION
using PackageManager
and setComponentEnabledSetting()
, to give you the right set. Since on Android 3.1+, the user will need to launch one of your activities to be able to add the app widget, anyway, you at least have the entry point in which to apply this logic.
Post a Comment for "Hide App Widget Depending On Api Level"