android - 有没有办法像日历应用一样动态更改应用图标?

标签 android dynamic icons android-calendar

我想创建一个 Android 应用程序,并且我想动态自动更新应用程序图标,类似于用户主屏幕上日历图标的更新方式。

日历会在每一天更改其图标,显示月份的日期。还有一个闹钟应用程序可以更改其图标设置当前时间,换句话说,每分钟更改一次。

这不是一个小部件,而是一个真正的应用程序图标。那么它必须有办法做到这一点。如何在我的应用程序中执行此操作?

最佳答案

无论您的主屏幕是什么,无论您的日历应用是什么,以及您的闹钟应用是什么,它都有特殊的 Hook 。一般情况下,应用无法更新其图标。

What do you mean by hooks?

例如,三星可以在三星设备上发布三星日历应用。三星在这些三星设备上的主屏幕可以有特殊规则来呈现三星日历应用程序的图标,这些规则涉及显示月份中的哪一天。这是因为三星编写了主屏幕。如果您安装第三方主屏幕,它可能不会做同样的事情。毕竟,我可以在一个小时左右的时间内编写一个主屏幕,而且我很有信心不必为三星的日历应用程序做任何特别的事情。

没有什么能阻止三星公开某种 API 以允许开发人员连接到三星的主屏幕并通知它这类事情。三星打算是否让第三方使用该 API,或者是否有人侵入三星如何为自己的应用程序使用该 API,我不能说。

(顺便说一句,我在这里引用三星作为一个可能的例子——我不知道他们实际上有这种功能,如果有的话,他们在哪些设备上拥有它)

我似乎记得有人有一个 GitHub 项目,它试图包装各种主屏幕的专有 API。 IIRC,一些受支持的功能包括替换应用程序图标或添加徽章(例如,未读消息计数)。然而:

  • 只有一小部分设备会支持这些专有 API

  • 通过逆向工程应用发现的未记录和不受支持的 API 可能会发生变化,并且可能会以意想不到的方式中断

我很确定 Android SDK 中没有任何东西支持动态应用程序图标。据我所知,人们尝试过的唯一一件事是使用 <activity-alias>有 N 个不同的“Activity ”,都指向相同的实现,但具有不同的图标。使用 PackageManagersetComponentEnabledSetting() ,该应用程序禁用了旧的启动器别名并启用了另一个别名,希望主屏幕会注意到这一点并显示新图标。有几个。其他人只会在重新启动时发现更改。

为了解决这个问题,我可以编写一个主屏幕。也许我想为应用程序提供一些动态更改图标的方法,即使没有标准。也许我没有。也许我根本不打算使用图标,因为我的主屏幕针对视障人士进行了优化,所以它使用文本到语音和硬件键输入。这是我的主屏幕实现,我可以为所欲为。

关于android - 有没有办法像日历应用一样动态更改应用图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592230/

相关文章:

c - 什么是 GTK "render detail"?

Eclipse 标准警告/错误覆盖图标

android - 如何播放音频文件来调用?

java - 手电筒/手电筒应用程序(android.hardware.camera 已弃用)

java - [Android]Object cannot be cast to java.lang.String Asynctask

dynamic - 使用 F# 在类/接口(interface)中动态定义多个成员

ios - "Add to home screen"图标在带有 HTTPS 的 iOS 13 上不起作用

android - picasso - 将图像加载到适配器中的图像按钮

dynamic - 在 Kotlin 中如何声明可以是字符串或函数的函数参数?

LINQ - 加入动态查询