【OpenHarmony/HarmonyOs 】零敏感权限启动:从 module 配置到 AI 识图禁用的精细化权限方案
【OpenHarmony/HarmonyOs 】零敏感权限启动:从 module 配置到 AI 识图禁用的精细化权限方案
本文基于我的 OpenHarmony/HarmonyOS 项目「物理视界 PhysicsVision」整理。项目当前没有相机、相册、麦克风、定位、通讯录、网络请求和 AI 识图调用,核心体验全部通过本地 Canvas、公式计算和题库完成。
这一篇专门对应“禁止 AI 识图、精细化权限管控、隐私保护方案”的主题。🔐
一、为什么要强调零敏感权限启动?
教育类 App 面向学生,尤其要谨慎处理权限。
一个学习工具如果启动就申请相机、相册、麦克风、定位,用户会产生疑问:
- 为什么学物理要相机?
- 为什么要访问照片?
- 会不会上传我的图片?
- 会不会记录我的声音?
- 会不会收集位置?
「物理视界」的设计选择是:
启动时不申请敏感权限,核心功能全部本地完成。
二、module.json5 中没有敏感权限声明
当前 module.json5 中主要声明了 EntryAbility 和 BackupExtensionAbility:
{
"module": {
"name": "entry",
"type": "entry",
"deviceTypes": [
"phone",
"tablet"
],
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"exported": true
}
]
}
}
项目没有额外声明相机、相册、麦克风、定位等敏感权限。
这意味着用户打开应用时,不会被权限弹窗打扰。
三、为什么禁用 AI 识图?
AI 识图在教育场景中常见,但并不一定适合所有学习产品。
对「物理视界」来说,禁用 AI 识图有几个原因:
- 物理学习更需要理解过程,而不是直接给答案;
- 拍照可能包含学生姓名、试卷、桌面环境;
- 上传图片会增加隐私和合规压力;
- AI 识别错误可能误导学习;
- 不做识图能减少权限和网络依赖。
所以项目选择“可交互模型”而不是“拍照识题”。
四、用 Canvas 替代拍照识题
例如凸透镜成像页面,用户不用拍题,直接调参数:
Slider({ value: this.objectDist, min: 20, max: 250, step: 1 })
.trackColor($r('app.color.slider_track'))
.selectedColor('#1A73E8')
.onChange((v: number) => {
this.objectDist = v
this.calculate()
})
公式计算:
let v = (u * f) / (u - f)
this.imageDist = v
this.imageHeight = -v / u * this.objectHeight
这样学生通过调节物距和焦距理解成像规律,不需要上传任何图片。
五、用本地题库替代云端问答
挑战模块的题目直接内置在本地:
interface QuizQuestion {
question: string
optionA: string
optionB: string
optionC: string
optionD: string
answer: number
category: string
grade: string
explanation: string
}
筛选也在本地完成:
const gradeMatch = this.selectedGrade === '全部' || q.grade === this.selectedGrade
const categoryMatch = this.selectedCategory === '全部' || q.category === this.selectedCategory
这避免了把学生答题行为发送到云端。
六、用公式计算器替代联网查询
公式计算器也是本地结构化配置:
calculate: (v) => `合外力 F = ${(v[0] * v[1]).toFixed(2)} N`
用户输入参数后立即得到结果,不需要联网搜索。
这既快,也更隐私友好。
七、学习数据最小化
项目只保存必要学习状态:
PersistentStorage.persistProp('favorites', '')
PersistentStorage.persistProp('highScore', 0)
PersistentStorage.persistProp('totalPlayed', 0)
PersistentStorage.persistProp('visitedModels', '')
这些数据不包含:
- 姓名;
- 手机号;
- 照片;
- 声音;
- 定位;
- 通讯录;
- 账号密码。
它们只是学习功能所需的本地状态。
八、用户可清理
设置页提供清除功能:
Button('清除收藏')
.onClick(() => {
if (this.favStr.length > 0) {
this.favStr = ''
promptAction.showToast({ message: '已清除所有收藏' })
}
})
Button('重置记录')
.onClick(() => {
if (this.totalPlayed > 0) {
this.highScore = 0
this.totalPlayed = 0
promptAction.showToast({ message: '已重置挑战记录' })
}
})
隐私保护不只是“不收集”,还要让用户能控制已有数据。
九、如果未来增加权限,应该怎么做?
如果后续加入近场快传、云同步或元服务,建议坚持按需授权:
- 用户点击分享时,再触发近场能力;
- 用户打开同步时,再说明同步内容;
- 用户开启 AI 功能时,再明确告知数据范围;
- 不在启动阶段一次性申请所有权限。
权限应该跟随具体功能,而不是提前打包申请。
十、总结
「物理视界」当前实现了一个很适合教育场景的隐私策略:零敏感权限启动、禁用 AI 识图、本地题库、本地公式、本地 Canvas 模拟和本地学习状态。
这篇文章对应的主题是:禁止 AI 识图 + 精细化权限管控 + 隐私保护方案。
它说明学习 App 并不一定要靠拍照、上传和识别才能做好体验;只要把端侧交互和可视化做好,同样能完成高质量学习闭环。✅


更多推荐


所有评论(0)