根据API级别隐藏应用小部件

dav*_*idk 14 android android-widget

我为Android的Honecomb之前版本创建了三个不同大小的app小部件,为Honeycomb及以后创建了一个可调整大小的可滚动listview小部件.

由于小部件提供相同的功能,而Honeycomb的目标功能可以调整大小,我想在API级别12或更高版本上删除其他版本的小部件.这有可能吗?

据我所知,如果可以找到AppWidgetProviderInfo资源文件,那么似乎没有任何方法可以禁止小部件被AppWidgetService注册.因此,似乎我只能在更高版本中包含小部件,但不能排除在以早期API版本为目标的xml文件夹中定义的版本.

xba*_*esx 19

OP已经得到了他的解决方案,但对于我们其他人来说,我们可以利用boolxml中的值并在不同的资源目录中以不同方式设置它们.

所以你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>
Run Code Online (Sandbox Code Playgroud)

并在/res/values/attrs.xml:

<resources>
    <bool name="is_pre_api_11">true</bool>
    <bool name="is_post_api_11">false</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后在/res/values-v11/attrs.xml:

<resources>
    <bool name="is_pre_api_11">false</bool>
    <bool name="is_post_api_11">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

现在,您的API 10及以下版本将有两个应用程序小部件(小型和大型),而API 11及更高版本将具有一个可调整大小的应用程序小部件.


Com*_*are 9

如果它是具有pre-HC或HC实现的单个app小部件,则可以将它们合并为一个AppWidgetProvider并使用res/xml-v11/res/xml/具有不同的元数据.

但是,我能想到处理你的场景的唯一方法是AppWidgetProviders在manifest(android:enabled="false")中标记一些禁用,然后在你的应用程序的第一次运行时启用和禁用你的提供程序,基于android.os.Build.VERSION使用PackageManagersetComponentEnabledSetting(),给你正确的.因为在Android 3.1+上,用户需要启动您的一个活动才能添加应用程序小部件,无论如何,您至少要有应用此逻辑的入口点.

  • @xbakesx:当我写这个答案时,我可能认为你的方法只能朝一个方向发展.但是,使用*two*`bool`资源,它可以适用于这种情况.有`@bool/honeycomb`和`@bool/not_honeycomb`,来自`res/values /`和`res/values-v11 /`的适当值,并使用`android:enabled`属性中的值. (4认同)