我想创建一个Android应用程序,我想动态地自动更新应用程序图标,类似于日历图标在用户主屏幕上的更新方式.
日历会更改每天显示某月份数字的图标.还有一个闹钟应用程序可以更改其图标设置当前时间,换句话说,每分钟更改一次.
这不是一个小部件,而是一个真正的应用程序图标.然后它必须有办法这样做.我怎么能在我的应用程序中执行此操作?
无论您的主屏幕是什么,都有特殊的挂钩,无论您的日历应用程序是什么,无论您的闹钟应用程序是什么.通常,应用无法更新其图标.
钩子是什么意思?
例如,三星可以在三星设备上发布三星日历应用程序.三星在同一台三星设备上的主屏幕可以为三星日历应用程序呈现图标的特殊规则,这些规则涉及显示当月的日期.这是因为三星写了主屏幕.如果您安装第三方主屏幕,它可能不会做同样的事情.毕竟,我可以在一个小时左右的时间内写一个主屏幕,我觉得我不必为三星的日历应用做任何特别的事情.
没有什么可以阻止三星暴露某种API以允许开发人员挂钩三星的主屏幕并通知它这类事情.三星是否打算让第三方使用该API,或者是否有人侵入三星如何为自己的应用程序执行此操作,我不能说.
(顺便说一句,我在这里引用三星作为一个可能的例子 - 我不知道他们实际上有这种功能,如果是这样,他们有哪些设备)
我似乎记得有人有一个GitHub项目试图包装各种主屏幕的专有API.IIRC,一些支持的功能包括替换应用程序图标或添加徽章(例如,未读消息计数).然而:
只有一小部分设备支持这些专有API
通过逆向工程应用程序发现的未记录和不受支持的API可能会发生变化,并可能以意想不到的方式中断
我非常确定Android SDK中没有任何内容支持动态应用程序图标.我所知道的,人们已经尝试过的唯一一件事就是使用
N个不同的"活动",所有这些都指向相同的实现,但是有不同的图标.使用PackageManager
和setComponentEnabledSetting()
,该应用程序禁用旧的启动器别名并启用另一个别名,希望主屏幕将在此处显示并显示新图标.一些.其他人只会发现重启时的变化.
为了解决问题,我可以写一个主屏幕.也许我想为应用程序提供一些动态更改图标的方法,即使它没有标准.也许我没有.也许我根本不想使用图标,因为我的主屏幕针对视障人士进行了优化,因此它使用文本到语音和硬件键输入.这是我的主屏幕实现,我可以做我想要的.
实际上,即使在Android O的应用程序抽屉中,“时钟”应用程序图标也会显示当前时间,而“日历”应用程序图标也会显示当前的月份。
本文介绍:
著名的Action Launcher背后的开发人员Chris Lacy在Android O附带的Clock应用的APK文件中发现了一些东西:manifest.xml将小时,分钟和秒提到为具有默认值的图层,并带有图标具有用于背景和不同元素的单独图像。
从逻辑上讲,他推断出从Android O开始,Clock应用程序的图标将被动画化以显示当前时间。将时钟作为快捷方式放在主屏幕上以及放在应用程序抽屉中时,都会发生这种情况。
听起来像素启动器会根据时间和日期选择不同的图标图像层资源。