是否可以仅针对某个 android 版本显示小部件?

Posted

技术标签:

【中文标题】是否可以仅针对某个 android 版本显示小部件?【英文标题】:is it possible to show widget only for a certain android version? 【发布时间】:2011-10-27 04:49:46 【问题描述】:

是否可以仅针对某个 android 版本在“添加到主屏幕 > 小部件”对话框中显示小部件,而无需上传两个 APK 并分配正确的 SDK 版本号?

【问题讨论】:

这会很有趣,不仅取决于版本,还取决于更多的东西。 当然会 :) 我刚写了 android 版本,因为 API 限制,我遇到了 2.1 的问题。 【参考方案1】:

我有办法不用任何代码,例如:

在您的 res\values 目录中创建一个 bools.xml 文件:

<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="honeycombOrAbove">false</bool> </resources>

创建一个 values-v11 目录(用于蜂窝或以上值),将文件复制到其中并将值设置为 true。

然后在小部件接收器的清单中使用:android:enabled="@bool/honeycombOrAbove"。我还在小部件的配置活动中使用了它。

这意味着小部件在安装时被禁用。

【讨论】:

出色的解决方案,因为它在安装应用程序时工作,这更像是一个配置问题。谢谢你 - 今天早上你为我节省了很多寻找解决方案的时间。 完美解决方案。这真的应该是公认的答案! 非常聪明的解决方案!绝对是最佳答案!【参考方案2】:

您可以使用 componentEnableSetting 来做到这一点。 只需禁用您不想列出的小部件。 该更改将在手机重启后生效。

Context context = getApplicationContext();
String str1 = "org.classname.to.widget.provider";
ComponentName componentName = new ComponentName(context, str1);
PackageManager packageManager = getPackageManager();

int versioncode = Integer.valueOf(android.os.Build.VERSION.SDK);    

//enable widget
packageManager.setComponentEnabledSetting(componentName, 1, 1);

//disable widget
packageManager.setComponentEnabledSetting(componentName, 2, 1);

【讨论】:

是的,这个解决方案有效,尽管我不得不稍微改变它,因为这个代码寻找的是应用程序的版本号,而不是 SDK。非常感谢! 你改变了什么?我可以编辑,然后您可以批准答案作为您问题的解决方案 就这一行“int versioncode = Integer.valueOf(android.os.Build.VERSION.SDK);”并添加 2.1 禁用和 2.2 或更高版本启用的条件 已批准。我喜欢这个答案的地方在于,您可以使用它来禁用几乎所有可能情况的小部件。谢谢 您应该使用int VERSION.SDK_INT,而不是需要String VERSION.SDK的已弃用和解析。

以上是关于是否可以仅针对某个 android 版本显示小部件?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Android 主屏幕小部件中向 im​​ageView 添加自定义可绘制对象?

多个 Android Widget 实例仅更新最后一个小部件

在添加小部件 android 之前显示微调器

Android 应用小部件实例发送相同的待处理意图

Wordpress:如何仅将 widget_title 过滤器应用于某个侧边栏中的小部件?

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