【OpenHarmony/HarmonyOs 】CheckMe 隐私保护实践:禁止 AI 识图、精细化权限管控与本地数据边界

发布时间:2026/7/14 9:51:14

【OpenHarmony/HarmonyOs 】CheckMe 隐私保护实践:禁止 AI 识图、精细化权限管控与本地数据边界
【OpenHarmony/HarmonyOs 】CheckMe 隐私保护实践禁止 AI 识图、精细化权限管控与本地数据边界本文基于CheckMe项目展开主题聚焦安全与隐私并进一步结合“禁止 AI 识图”“精细化权限管控”“隐私保护方案”三个方向讲一个设备监控类 App 如何建立清晰的数据边界。设备信息类 App 很容易踩一个坑为了功能完整申请一堆权限为了体验智能接入一堆识别能力为了分析方便把数据传到服务端。但CheckMe这种应用的核心卖点恰恰应该是可信用户愿意让你读取设备状态用户愿意让你做硬件检测用户愿意让你临时获取位置用户不希望你偷偷识别图片、上传隐私、长期跟踪所以这篇文章的关键词不是“能拿多少数据”而是少拿、明示、本地、可拒绝。一、先看项目权限清单CheckMe在module.json5中声明了权限requestPermissions: [ {name:ohos.permission.GET_NETWORK_INFO,reason:$string:permission_network_reason,usedScene: {abilities: [EntryAbility],when:always} }, {name:ohos.permission.GET_WIFI_INFO,reason:$string:permission_network_reason,usedScene: {abilities: [EntryAbility],when:always} }, {name:ohos.permission.APPROXIMATELY_LOCATION,reason:$string:permission_location_reason,usedScene: {abilities: [EntryAbility],when:inuse} }, {name:ohos.permission.LOCATION,reason:$string:permission_location_reason,usedScene: {abilities: [EntryAbility],when:inuse} }, {name:ohos.permission.CAMERA,reason:$string:permission_camera_reason,usedScene: {abilities: [EntryAbility],when:inuse} } ]从这个配置能看出几个安全设计点网络状态权限用于展示网络信息定位权限仅在使用时申请相机权限用于手电筒、相机测试等明确功能没有声明相册读取权限没有声明人脸识别或生物认证权限没有声明后台定位这对“禁止 AI 识图”主题非常重要项目的媒体页只展示编解码和格式能力不读取用户图库不上传图片也不做云端识图。二、禁止 AI 识图从产品边界开始设计“禁止 AI 识图”不只是一个开关而是一套产品边界。在CheckMe中媒体能力页关注的是设备支持什么格式JPEGPNGWebPGIFBMPHEIF / HEICH.264 / H.265AV1HLS / DASH / RTSP对应服务代码如下public getSupportedImageFormats(): MediaCapability[] { return [ { capabilityId: image_jpeg, capabilityName: JPEG, supportedFormats: [jpg, jpeg], maxResolution: 16384x16384, isSupported: true, codecInfo: EXIF 支持 }, { capabilityId: image_png, capabilityName: PNG, supportedFormats: [png], maxResolution: 16384x16384, isSupported: true, codecInfo: 透明通道支持 }, { capabilityId: image_heif, capabilityName: HEIF / HEIC, supportedFormats: [heif, heic], maxResolution: 16384x16384, isSupported: true, codecInfo: 高效压缩 } ]; }注意这里只做“能力展示”没有读取用户图片也没有调用视觉识别模型。如果后续项目真的要接入 AI 识图我建议至少加三层保护默认关闭 AI 识图。每次识别前由用户主动选择图片。明确提示识别位置端侧识别还是云端识别。更严格一点可以增加一个配置项interfacePrivacySettings{ allowImageRecognition:boolean; allowCloudRecognition:boolean; allowSaveRecognitionHistory:boolean; }默认值应该是const defaultPrivacySettings:PrivacySettings{allowImageRecognition:false,allowCloudRecognition:false,allowSaveRecognitionHistory:false};这样写文章时就可以把“禁止 AI 识图”从口号落到工程方案上。三、精细化权限管控手电筒是一个好例子很多应用会在启动时一次性申请相机权限但CheckMe没有这么做。手电筒能力放在QuickToolsService中先查询能力和权限再在用户实际使用时申请。privateasyncisCameraPermissionGranted(context: common.UIAbilityContext):Promiseboolean {try{constatManager: abilityAccessCtrl.AtManager abilityAccessCtrl.createAtManager();consttokenId:number context.applicationInfo.accessTokenId;conststatus: abilityAccessCtrl.GrantStatusawaitatManager.checkAccessToken(tokenId,ohos.permission.CAMERA);returnstatus abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; }catch(_e) {returnfalse; } }工具页展示能力时不触发权限弹窗publicasyncgetTorchCapabilityHint(context: common.UIAbilityContext):Promisestring {constcamManager: camera.CameraManager camera.getCameraManager(context);if(!camManager.isTorchSupported()) {return设备不支持; }constgranted:booleanawaitthis.isCameraPermissionGranted(context);if(!granted) {return需相机权限; }return可用; }这段很值得写进文章因为它体现了一个隐私友好的交互页面展示“需相机权限”不在用户没点击时弹窗用户点击手电筒时再申请用户拒绝后给出明确提示真正执行时才申请权限publicasyncensureCameraPermission(context: common.UIAbilityContext):Promiseboolean {constatManager: abilityAccessCtrl.AtManager abilityAccessCtrl.createAtManager();constrequest awaitatManager.requestPermissionsFromUser( context, [ohos.permission.CAMERA] );returnrequest.authResults!undefined request.authResults.length0 request.authResults[0] 0; }这种模式可以总结为先解释再申请先判断再执行。四、定位权限只在使用中申请并给出失败原因定位是隐私敏感能力项目中使用了近似位置和精确位置privateasyncrequestLocationPermissionsIfNeeded(context: common.UIAbilityContext):Promiseboolean {constwantPermissions:Permissions[] [ohos.permission.APPROXIMATELY_LOCATIONasPermissions,ohos.permission.LOCATIONasPermissions];constatManager: abilityAccessCtrl.AtManager abilityAccessCtrl.createAtManager();constresult awaitatManager.requestPermissionsFromUser( context, wantPermissions );returnresult.authResults!undefined result.authResults.every((v:number) v 0); }如果用户拒绝项目不会继续“硬拿数据”而是返回明确失败原因if(!permissionOk) { AppStorage.setOrCreate(locationAuthorized,false);return{ location:null, failureReason: LocationFailureReason.PERMISSION_DENIED, failureHint:定位权限被拒绝。请在系统设置中允许精确位置。}; }这类失败态非常重要。权限保护不是只写配置用户拒绝后页面仍然应该可理解为什么没有数据需要打开哪个权限不授权是否还能使用其他功能隐私友好的 App 不应该把“拒绝授权”当作异常而应该把它当作正常路径。五、隐私保护方案给数据分级对于CheckMe这样的应用可以把数据分为三类数据类型示例风险等级处理方式普通设备状态CPU、内存、电池百分比低本地展示环境与网络状态WiFi、IP、定位精度中按需展示不默认导出高敏感数据精确位置、图片、人脸高默认关闭用户主动触发项目已有的数据模型中包含 CPU、内存、网络、位置、相机、媒体等能力。如果要继续强化隐私可以增加一个统一的数据导出策略interfaceExportPolicy{ includeLocation:boolean; includeNetworkAddress:boolean; includeDeviceIdentifier:boolean; includeMediaFileMetadata:boolean; }默认导出时建议不导出精确经纬度不导出完整 IP 或设备唯一标识不导出图片 EXIF不保存用户图片内容不上传检测报告这样即使后续做近场分享、报告导出、AI 分析也有明确边界。六、本地优先设备监控数据不必上云CheckMe的大多数能力都可以本地完成CPU 信息本地读取内存信息本地读取存储信息本地读取电池信息本地读取媒体支持能力本地枚举硬件检测本地完成这给隐私保护提供了天然优势。文章里可以明确写出本地优先原则能在端侧计算的不上传。能展示摘要的不展示原始敏感数据。能让用户手动触发的不自动后台触发。能用一次性权限的不长期持有。如果后续接入端侧 AI也应该优先选择端侧推理而不是默认云端识别。端侧 AI 的优势不只是速度也包括数据不离开设备。七、禁止 AI 识图的 UI 表达建议如果要把这个主题继续做成产品能力可以在设置页增加一个“隐私保护”分组隐私保护[关闭]AI 图片识别[关闭]云端识别[关闭]保存识别历史[开启]报告导出前脱敏当用户进入媒体页时只展示图片格式支持视频编解码支持音频编解码支持流媒体协议支持如果用户点击“识别图片”再弹出说明该功能需要你主动选择图片。 默认仅在本机处理不上传原图。 你可以随时在隐私设置中关闭。这种表达比简单写一句“我们重视隐私”更有说服力。八、文章小结CheckMe这个项目适合用来写隐私保护主题因为它天然涉及多个敏感边界相机权限定位权限网络状态媒体能力设备状态桌面卡片数据但它的实现思路比较克制不启动时乱弹权限不读取用户图库不默认做 AI 识图不把位置失败当崩溃不把所有数据都上传能本地处理就本地处理最后总结成一句话一个好的 HarmonyOS 工具类应用不是能拿多少权限而是能把权限用得多克制。️参考资料华为开发者文档Requesting User Authorization华为开发者文档Application Permission Request Best Practices华为开发者文档Core Vision Kit

相关新闻

AI 架构能力——新一代架构图绘制方法论

AI 架构能力——新一代架构图绘制方法论

2026/7/13 4:34:18

一、需求背景:AI 辅助生成架构图的两种路径 Mermaid 等代码化方案适合文档嵌入,但 AI 还能进一步降低门槛。市场上有两大类工具: 类型代表工具工作方式 AI 编辑器 Cursor、Qoder 描述需求 → AI 生成 Mermaid 代码 在线绘图工具 Proces…

STM32工具软件

STM32工具软件

2026/7/14 0:51:21

STM32工具软件 https://wwapn.lanzoul.com/b01d72a06b 密码:8nft串口&网络调试助手 https://wwapn.lanzoul.com/b01d7262xg 密码:dr2n

基于51单片机 stm32单片机汽车胎压监测轮胎压力气压无线传输报警32(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于51单片机 stm32单片机汽车胎压监测轮胎压力气压无线传输报警32(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

2026/7/10 16:26:00

基于51单片机 stm32单片机汽车胎压监测轮胎压力气压无线传输报警32(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 版本一/五:气压检测声光报警 通过单片机进行数据处理LCD1602液晶显示当前气压、气压上限、下限按键设置气压上限和…

Python中文词云实战:从TF-IDF到出版级可视化

Python中文词云实战:从TF-IDF到出版级可视化

2026/7/14 9:47:11

1. 项目概述:用Python三步生成专业级词云,不是贴图,是真正可分析、可复用、可嵌入报告的文本可视化工具“Word-cloud with Python”这个标题看起来简单,但背后藏着一个被严重低估的文本分析入口。我带过几十个数据分析新人&#x…

xG(预期进球)原理与实战应用全解析

xG(预期进球)原理与实战应用全解析

2026/7/14 9:47:11

1. 什么是xG?它不是“预测进球”,而是给每一次射门打分你有没有在看球时听到解说员说:“这脚射门角度太正了,按常理应该进”或者“离门三十米远还强行起脚,这球基本没戏”?这些话背后,其实藏着一…

openEuler社区官网性能优化终极指南:从首屏加载到资源缓存的10个关键策略

openEuler社区官网性能优化终极指南:从首屏加载到资源缓存的10个关键策略

2026/7/14 9:47:11

openEuler社区官网性能优化终极指南:从首屏加载到资源缓存的10个关键策略 【免费下载链接】openEuler-portal The repository of openEuler portal 项目地址: https://gitcode.com/openeuler/openEuler-portal 前往项目官网免费下载:https://ar.o…

Spring Boot集成SM4-GCM国密算法实战:从AES迁移到合规数据加密

Spring Boot集成SM4-GCM国密算法实战:从AES迁移到合规数据加密

2026/7/14 9:47:11

1. 项目概述:为什么是SM4-GCM?最近在重构一个金融相关的后台服务时,遇到了一个老生常谈但又不得不面对的问题:数据加密。项目里历史遗留的AES加密代码散落在各处,每次审计或者对接新的监管平台时,都要解释一…

OpenClaw与飞书插件集成指南:AI智能体提升工作效率

OpenClaw与飞书插件集成指南:AI智能体提升工作效率

2026/7/14 9:47:11

1. OpenClaw与飞书官方插件概述OpenClaw作为一款开源的AI智能体系统,正在重新定义个人生产力工具的边界。与市面上大多数AI助手不同,它的核心优势在于能够深度融入用户的工作流,成为真正意义上的"数字分身"。我初次接触这个工具时&…

SysAIFrame模型扩展实战:如何快速添加自定义LLM提供商的完整指南

SysAIFrame模型扩展实战:如何快速添加自定义LLM提供商的完整指南

2026/7/14 9:37:10

SysAIFrame模型扩展实战:如何快速添加自定义LLM提供商的完整指南 【免费下载链接】SysAIFrame Focusing on AI frontiers, enhancing the operating systems overall support for AI applications. 项目地址: https://gitcode.com/openeuler/SysAIFrame 前往…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/13 7:41:16

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…