更新记录

前言

不同于一般分享技术和笔记的博客,我正在尝试开发一些真正有用的作品并分享在这个网站上。

这是我的第一个作品:ChunZhen —— 一款致力于让用户养成良好用眼习惯的安卓应用。

当我们注视手机屏幕时,总是会不自觉的拉近眼睛与屏幕的距离。不当的视距是否直接导致近视还有待考察,但确实很容易导致眼睛干燥和疲劳。

ChunZhen的诞生就是为了解决上面这个问题——当你无意识地靠近屏幕时,它会友好地提醒你保持安全距离。督促你停留在安全的警戒线外。久而久之,这个安全距离或许会成为你的习惯。这对于需要培养良好用眼习惯和防止近视的青少年来说尤其有帮助。


使用说明

ChunZhen目前正处于开发阶段,各方面还不是很完善(特别是ui体验)。所以使用起来会有一些困扰,我觉得有必要说明如何使用ChunZhen。虽然界面并不友好,但好消息是:经过一些简单的配置后,你基本上就不需要再次打开它,并能享受到还算不错的服务。

目前的ui界面:



ChunZhen的核心理念是无感设计。这种设计理念为的是减少对用户的干扰和增加繁琐的操作体验,使得它能够无缝嵌入用户的日常生活。

我们靠床躺下,打开抖音,这是一个水到渠成的过程。没有人会愿意在躺下床和打开抖音之间再加入一个其他的步骤。: 用户不希望他们既有的习惯被打破。所以,如果你想要获得ChunZhen提供的服务,你需要做的就是:靠床躺下,然后打开抖音。


首先,你需要接受应用请求的权限:相机(用于距离感知)、悬浮窗(用于显示提醒)、Usage(用于统计应用的使用情况)Googel对权限的管理越来越严

你可以通过两种方式来获得ChunZhen提供的服务。

  1. 在主界面点击“开启服务”按钮后,服务将会启动,并应用一个“标签”。“标签”相当于特定场景下的安全距离,你可以自定义不同的标签,比如“看书”、“刷视频“,分别在看书和刷视频时使用。
  2. 预置了两种提醒方案,上图展示了第一种(从屏幕顶端延申下来的小波浪) 你也可以在设置中启用第二种提醒方案。


  3. 并不推荐使用第一种方式,第二种方式更加符合ChunZhen的设计原则,并且或许是一个真正实用的功能。它允许你将服务绑定到一个其他的app,并应用一个“标签”。比如说,当你将抖音绑定到”刷视频“标签后,当你打开抖音时,会自动唤醒服务;当你退出抖音时,服务会自行关闭。这一过程不需要你提前运行ChunZhen。也就是说,在这以后,你完全可以不再打开ChunZhen,而享受它提供的服务。
  4. 如前所说,目前的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,;



项目简介

时间:7月底 ~ 至今

ChunZhen使用目前主流的android编程语言——Kotlin编写,采用了现代化的UI设计方案——Jetpack Compose,使用Room作为数据存储方案。涉及技术面包括:



之后:

为了避免误会,必须提前申明一下,我的求职岗位是:Java后端工程师,而非android开发员。选择android项目作为第一个独立开发的项目的唯一原因是:我同往常一样为自己制定了完美的暑假计划——我将在一个半月的时间内完成三个作品,展示三年来的学习成果,而ChunZhen不幸排到了第一位。

大家都知道类似“暑假计划”这种组合的最终结局。而事实也证明我的学习成果十分有限,并且对android开发有很大的误解。整个过程可以说是一个从头开始的学习过程。而随着时间的推移,起初的热情也逐渐消退,目前项目正处于半搁置状态(需要准备找实习、上课等、规划另一个项目、玩)

虽然但是,我会继续完善项目的各项功能,优化UI和用户体验,同时考虑进一步降低能耗。争取在月底前完成一个稳定版本,并整理代码上传。

下载 ChunZhen
  • 下一次更新
  • 更多我的项目