不同于一般分享技术和笔记的博客,我正在尝试开发一些真正有用的作品并分享在这个网站上。
这是我的第一个作品:ChunZhen —— 一款致力于让用户养成良好用眼习惯的安卓应用。
当我们注视手机屏幕时,总是会不自觉的拉近眼睛与屏幕的距离。不当的视距是否直接导致近视还有待考察,但确实很容易导致眼睛干燥和疲劳。
ChunZhen的诞生就是为了解决上面这个问题——当你无意识地靠近屏幕时,它会友好地提醒你保持安全距离。督促你停留在安全的警戒线外。久而久之,这个安全距离或许会成为你的习惯。这对于需要培养良好用眼习惯和防止近视的青少年来说尤其有帮助。
ChunZhen目前正处于开发阶段,各方面还不是很完善(特别是ui体验)。所以使用起来会有一些困扰,我觉得有必要说明如何使用ChunZhen。虽然界面并不友好,但好消息是:经过一些简单的配置后,你基本上就不需要再次打开它,并能享受到还算不错的服务。
目前的ui界面:
ChunZhen的核心理念是无感设计。这种设计理念为的是减少对用户的干扰和增加繁琐的操作体验,使得它能够无缝嵌入用户的日常生活。
我们靠床躺下,打开抖音,这是一个水到渠成的过程。没有人会愿意在躺下床和打开抖音之间再加入一个其他的步骤。: 用户不希望他们既有的习惯被打破。所以,如果你想要获得ChunZhen提供的服务,你需要做的就是:靠床躺下,然后打开抖音。
首先,你需要接受应用请求的权限:相机(用于距离感知)、悬浮窗(用于显示提醒)、Usage(用于统计应用的使用情况)Googel对权限的管理越来越严
你可以通过两种方式来获得ChunZhen提供的服务。
预置了两种提醒方案,上图展示了第一种(从屏幕顶端延申下来的小波浪) 你也可以在设置中启用第二种提醒方案。
如前所说,目前的ui界面尚未完善,所以应用绑定功能藏的颇为隐蔽。下面以抖音为例,展示如何绑定应用至相应的标签。
打开使用报告屏幕(第二个界面)—> 选择抖音app —> 点击"应用绑定"按钮,并选择一个标签。(删除绑定也在同一个位置)
注意: 为了防止应用在后台偷偷耗电,大多数手机厂商默认不允许应用在后台运行。因此,为了确保 **ChunZhen** 能够正常工作,请将它加入“耗电白名单”或“自启动白名单”中。
由于各个厂商的实现不同,您可以打开手机设置,使用搜索功能查找“自启动”或“电池优化”,然后开启相应权限。至于耗电,ChunZhen只会简单地监听应用的启动事件,并且这种监听是事件驱动的(而不是持续占用资源的忙轮询),几乎不会造成电量消耗。(有些应用可能由于厂商之间有合作,默认就是自启的,如QQ、微信、淘宝等)
ChunZhen可以感知用户与屏幕的距离,这通过比较”标签“与相机捕获图像中人脸的大小来实现。其中ImagePrecesser类扮演了重要的角色。当启动服务时,ImagePrecesser首先处于静息状态,此时他会以0.3秒/次的频率向相机索要图像,并通过Google提供的机器学习库——ML_Kit处理图像,由于我们仅需要知道人脸的大小信息,而且ML_Kit本身也是一个十分轻量的机器学习库。所以在静息状态下服务的资源占用不会大于在后台播放一首音乐。ImagePrecess内部维护一个十分高效的比特环,用于消除抖动(避免突然的靠近、远离带来的不稳定性)当确认用户的距离小于安全距离时,服务会以某种形式通知用户,同时ImagePrecess会更加努力的工作,它放弃的0.3秒的休息时间,持续不断的向相机索要图像。直到用户重新回归安全距离(同样通过比特环进行了消抖)。所以,只要你能很好的保持用眼距离,ChunZhen并不会占用过多的cup资源。
下图为ChunZhen服务运行时的cpu和内存占用情况:
图一为静息状态:cpu占用约 5%-%7,内存占用200m; 图二为聚焦状态:cpu占用约 15%-20%,内存占用250m,;ChunZhen使用目前主流的android编程语言——Kotlin编写,采用了现代化的UI设计方案——Jetpack Compose,使用Room作为数据存储方案。涉及技术面包括:
为了避免误会,必须提前申明一下,我的求职岗位是:Java后端工程师,而非android开发员。选择android项目作为第一个独立开发的项目的唯一原因是:我同往常一样为自己制定了完美的暑假计划——我将在一个半月的时间内完成三个作品,展示三年来的学习成果,而ChunZhen不幸排到了第一位。
大家都知道类似“暑假计划”这种组合的最终结局。而事实也证明我的学习成果十分有限,并且对android开发有很大的误解。整个过程可以说是一个从头开始的学习过程。而随着时间的推移,起初的热情也逐渐消退,目前项目正处于半搁置状态(需要准备找实习、上课等、规划另一个项目、玩)
虽然但是,我会继续完善项目的各项功能,优化UI和用户体验,同时考虑进一步降低能耗。争取在月底前完成一个稳定版本,并整理代码上传。
下载 ChunZhen