凌晨三点,我的咖啡杯底最后一口冷掉的液体晃出涟漪 ——PC 端刚写了一半的会议纪要,手机上突然弹出女儿班主任的消息。切换设备的瞬间,灵感像受惊的鸟雀飞散了。"要是能在电脑上直接用手机摄像头拍黑板照片就好了",这个念头像颗种子,落在了刚升级的 HarmonyOS 5.0.5 系统里。

一、被弹窗逼出来的权限课

决定开发这款跨设备笔记应用时,我对 API17 的认知还停留在官方文档的加粗字体里。第一天就栽在了权限配置上 —— 分布式数据库初始化时弹出的红色报错,像老师批改作业时打的叉。

对着屏幕发呆的十分钟里,我把config.json翻来覆去看了八遍,才发现漏掉了权限声明。当"ohos.permission.DISTRIBUTED_DATASYNC"这行代码敲进去时,窗外的天已经泛白。后来才知道,API17 对跨设备权限的管控更严格了,就像给数据同步加了把更精密的锁。

初始化分布式数据库的那个清晨,我在冲突解决器里写下 "保留最新修改" 的逻辑。当时只是觉得这行代码很简单,直到一周后在公司会议室,亲眼看到同事的平板和我的 PC 同时修改同一条笔记,屏幕上自动跳出 "检测到多设备编辑,已保留最新版本" 的提示时,才真正理解了这段代码的分量。

二、窗口记忆里的生活哲学

最让我着迷的是 API17 的窗口管理功能。作为一个习惯把窗口拖到屏幕右侧三分之一处码字的人,每次重启应用都要重新调整窗口大小,像每天起床都要重新整理枕头一样繁琐。

当我在代码里加入Window.setWindowRectAutoSave(true)时,完全没料到会带来惊喜。那天下午突然断电,重启电脑打开应用的瞬间,笔记窗口精准地回到了我熟悉的位置,连光标都停在断电前输入的那个逗号后面。这种 "记得你习惯" 的感觉,比任何华丽的功能都更动人。

为了实现 PC 和 Pad 的不同布局,我在 ArkUI X 里写了段判断设备类型的代码:

if (deviceType === 'pc') {

// PC端双栏布局:左侧列表+右侧编辑区

Column() {

Row() {

NoteList().width('30%')

NoteEditor().width('70%')

}

}

} else {

// 平板端单栏布局:可滑动切换

Tabs() {

TabContent('列表') { NoteList() }

TabContent('编辑') { NoteEditor() }

}

}

测试那天,我抱着平板在厨房做饭,随手滑动切换到编辑页记菜谱;回到书桌前打开 PC,双栏布局自动展开,左边看着购物清单,右边修改菜谱步骤。这种无缝衔接的体验,让技术有了温度。

三、跨设备协作的魔法时刻

调用手机摄像头拍摄插入 PC 笔记的功能,是整个开发过程中最像魔法的部分。第一次成功实现时,我在办公室激动地拍了桌子。

那段代码其实不长:

// 点击PC端"插入图片"按钮时

async function pickImageFromPhone() {

const devices = await DeviceManager.getAvailableDevices()

const myPhone = devices.find(d => d.name === '我的Mate 60')

if (myPhone) {

const imageData = await DeviceManager.callRemoteCamera(myPhone.id)

insertIntoNote(imageData) // 插入当前编辑的笔记

}

}

但背后的调试过程却充满波折。最初调用时,手机端总是弹出 "权限请求" 后无响应。后来才发现,API17 要求跨设备调用必须在两端都声明权限,就像拜访邻居不仅要自己出门,还得确保对方家门没锁。

解决问题的那天,写游记的时候写到 "清晨的阳光透过教堂彩绘玻璃" 时,突然想插入上周用手机拍的照片。点击按钮,口袋里的手机自动亮起拍照界面,按下快门的瞬间,照片已经出现在 PC 的笔记里。同事路过我的工位,惊讶地说 "你这是在玩魔术吗"—— 这大概是对程序员最好的赞美。

四、那些藏在代码里的成长

开发过程中踩过的坑,比成功的瞬间更让人难忘。有次数据库同步失败,排查了三天才发现是冲突处理器里的时间戳比较写反了方向,导致新内容总是被旧内容覆盖。那段时间,我的笔记里满是 "2024 年 10 月 12 日" 和 "2024 年 10 月 11 日" 的测试记录,像本写满日期的错题集。

性能优化时学到的 "分批同步" 策略,后来竟用到了生活里。就像给笔记图片分批次压缩传输一样,我开始把周末的家务分成 "清洁"、"采购"、"整理" 三个批次完成,效率居然提高了不少。原来技术思维真的会悄悄改变生活方式。

 

代码之外的连接

现在这款笔记应用成了我生活的一部分:在通勤的地铁上用手机写灵感碎片,到公司打开 PC 自动同步,开会时用平板批注,回家前调用打印机打印待办清单。API17 的分布式能力,不仅同步了数据,更连接了我的工作与生活。

有时候我会想,技术的终极意义是什么?或许就像这个小小的笔记应用,它不会改变世界,却能让每个使用它的人,在设备切换的瞬间少一点烦躁,在灵感闪现时多一分从容。当代码学会了 "记得" 和 "连接",技术便有了人情味。

这大概就是鸿蒙生态最动人的地方 —— 它不只提供 API,更提供了一种让数字生活更自然的可能。而我们开发者,不过是这种可能的转述者罢了。

 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐