推荐 最新
万码4P7VTGUT

HarmonyOS

![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/Fo2cSp_AUgItneRuWT_y0ZU3wZX-.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/Fo2cSp_AUgItneRuWT_y0ZU3wZX-.png) ### 一、鸿蒙系统简介 鸿蒙系统(HarmonyOS),是第一款基于微内核的全场景分布式OS,是华为自主研发的操作系统。2019年8月9日,鸿蒙系统在华为开发者大会上正式发布,华为会率先部署在智慧屏、车载终端、穿戴等智能终端上,未来会有越来越多的智能设备使用开源的鸿蒙OS。 鸿蒙OS实现模块化耦合,对应不同设备可弹性部署,鸿蒙OS有三层架构,第一层是内核,第二层是基础服务,第三层是程序框架 。可用于大屏、PC、汽车等各种不同的设备上。还可以随时用在手机上,但暂时华为手机端依然优先使用安卓。 鸿蒙 OS 底层由鸿蒙微内核、Linux 内核、Lite OS 组成,未来将发展为完全的鸿蒙微内核架构。 ### 二、鸿蒙系统发展进程 - [2012] 2012年华为开始在上海交通大学规划“鸿蒙”操作系统。 - [2019] 华为已经对100万部搭载有自研“鸿蒙”操作系统的手机进行了测试。 - [2019.5.17] 华为操作系统团队开发了其自主产权的“鸿蒙操作系统”。 - [2019.5.24] 注册公告日期是2019年5月14日,专用权限期是从2019年5月14日到2029年5月13日。 - [2019.8.9] 华为官方发布“鸿蒙操作系统”,并且宣布“鸿蒙操作系统”将开源。 ### 三、鸿蒙系统特点 ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FjSSKjeFEIAcNS4t2l0dsXpuL-LO.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FjSSKjeFEIAcNS4t2l0dsXpuL-LO.png) 鸿蒙OS的设计初衷是为满足全场景智慧体验的高标准的连接要求,为此华为提出了4大特性的系统解决方案。 1. 分布式架构首次用于终端OS,实现跨终端无缝协同体验 鸿蒙OS的“分布式OS架构”和“分布式软总线技术”通过公共通信平台,分布式数据管理,分布式能力调度和虚拟外设四大能力,将相应分布式应用的底层技术实现难度对应用开发者屏蔽,使开发者能够聚焦自身业务逻辑,像开发同一终端一样开发跨终端分布式应用,也使最终消费者享受到强大的跨终端业务协同能力为各使用场景带来的无缝体验。 ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/Fs6SrYxTr9iyZkoilNR_VXdcdDfi.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/Fs6SrYxTr9iyZkoilNR_VXdcdDfi.png) 2. 确定时延引擎和高性能IPC技术实现系统天生流畅 鸿蒙 OS通过使用确定时延引擎和高性能IPC两大技术解决现有系统性能不足的问题。确定时延引擎可在任务执行前分配系统中任务执行优先级及时限进行调度处理,优先级高的任务资源将优先保障调度,应用响应时延降低25.7%。鸿蒙微内核结构小巧的特性使IPC(进程间通信)性能大大提高,进程通信效率较现有系统提升5倍。 ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FrQB-BDdZIxpDlFV9eoJbDEdwDej.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FrQB-BDdZIxpDlFV9eoJbDEdwDej.png) 3. 基于微内核架构重塑终端设备可信安全 鸿蒙OS采用全新的微内核设计,拥有更强的安全特性和低时延等特点。微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。微内核只提供最基础的服务,比如多进程调度和多进程通信等。 ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/Fqzqun8dExdBwpzkD3sU6v9adLV5.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/Fqzqun8dExdBwpzkD3sU6v9adLV5.png) 鸿蒙OS将微内核技术应用于可信执行环境(TEE),通过形式化方法,重塑可信安全。形式化方法是利用数学方法,从源头验证系统正确,无漏洞的有效手段。传统验证方法如功能验证,模拟攻击等只能在选择的有限场景进行验证,而形式化方法可通过数据模型验证所有软件运行路径。 鸿蒙OS首次将形式化方法用于终端TEE,显著提升安全等级。同时由于鸿蒙OS微内核的代码量只有Linux宏内核的千分之一,其受攻击几率也大幅降低。 4. 通过统一IDE支撑一次开发,多端部署,实现跨终端生态共享 鸿蒙OS凭借多终端开发IDE,多语言统一编译,分布式架构Kit提供屏幕布局控件以及交互的自动适配,支持控件拖拽,面向预览的可视化编程,从而使开发者可以基于同一工程高效构建多端自动运行App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。华为方舟编译器是首个取代Android虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译为机器码。此外,方舟编译器未来将支持多语言统一编译,可大幅提高开发效率。 ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FprQTz2h8fzqpY8pODWWlst4gw-G.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FprQTz2h8fzqpY8pODWWlst4gw-G.png)

6
0
0
浏览量40
byte10

OpenHarmony

鸿蒙HarmonyOS、开源鸿蒙系统OpenHarmony分布式操作系统 华为鸿蒙分布式操作系统(Huawei OpenHarmony),开源鸿蒙系统(OpenHarmony)分布式操作系统开发技术交流,鸿蒙技术资料,手册,指南,共建万物互联新生态。 ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FvkuPpAaBgGzJpVL8eG8wkk65JhD.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FvkuPpAaBgGzJpVL8eG8wkk65JhD.png) ![https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FlErxMvB9ho8zN15Binq0hGkb-Fw.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/community/FlErxMvB9ho8zN15Binq0hGkb-Fw.png) 鸿蒙OS分布式操作系统简介 鸿蒙系统(HarmonyOS),是第一款基于微内核的全场景分布式OS,是华为自主研发的操作系统。2019年8月9日,鸿蒙系统在华为开发者大会上正式发布,华为会率先部署在智慧屏、车载终端、穿戴等智能终端上,未来会有越来越多的智能设备使用开源的鸿蒙OS。2020年9月10日,在华为开发者大会2020上,华为消费者业务CEO余承东发布鸿蒙系统HarmonyOS 2.0,计划12月份支持手机,2021发布带鸿蒙OS的华为手机,平板等所有设备。 鸿蒙OS实现模块化耦合,对应不同设备可弹性部署,鸿蒙OS有三层架构,第一层是内核,第二层是基础服务,第三层是程序框架 。可用于大屏、PC、汽车等各种不同的设备上。还可以随时用在手机,平板上。 鸿蒙 OS 底层由鸿蒙微内核、Linux 内核、Lite OS 组成,未来将发展为完全的鸿蒙微内核架构。 鸿蒙2.0的开源主要分为三个阶段: 1、9⽉10⽇起,HarmonyOS将⾯向智慧屏、可穿戴设备、⻋机等RAM在128KB-128MB终端设备开放源代码, 2020年12⽉⾸先向开发者发布⼿机HarmonyOS 2.0开发者Beta版本,提供开发环境、⼯具、模拟器和开发⽂档; 2、2021年4⽉底前,向RAM在128MB-4GB终端设备,包括平板、低内存⼿机等开源,并在适当时候发布商⽤版本; 3、鸿蒙系统 2.0 6 月 2 号陆续开源 L2 分支,无安卓代码的纯鸿蒙系统,手机内核基于Linux4.19版本,只支持纯鸿蒙的应用。 同时发布L3-L5是双框架版本,开发者公测的Beta3版本,支持运行纯鸿蒙应用,也支持运行所有的Android应用。 4、2021年10⽉以后⾯向4GB以上所有设备开源。 5、OpenHarmonyOS为开放原子开源基金会(OpenAtom Foundation)旗下开源项目,由华为捐赠核心架构源码,任何个人和组织可以基于开源协议开发或定制系统,包括商用,无需缴纳专利费用。 6、HarmonyOS是华为基于开放原子开源基金会(OpenAtom Foundation)旗下开源OpenHarmonyOS项目开发的发行版本,目前支持华为和荣耀系列,兼容安卓APP。 7、2021年9月12日,余承东宣布鸿蒙系统用户升级超过1亿用户,成为全球破亿最快的移动操作系统。 8、发布应用于采矿行业的操作系统矿鸿,鸿蒙生态体系延伸到工业,农业等传统产业。 9、2021年10月22日,HDC2021华为开发者大会,余承东宣布鸿蒙系统用户升级超过1.5亿用户,成为全球发展最快的移动操作系统。 10、2021年10月27日, Eclipse基金会推出基于OpenHarmony的新物联网操作系统Oniro OS。 11、2022年5月,鸿蒙系统掌舵人王成录从华为离职,加盟深开鸿,引领开源鸿蒙生态 12、2022年8月,中国电信天翼物联宣布正式加入OpenHarmony(“开源鸿蒙”)社区,并主导成立智慧城市蜂窝终端管理SIG (Special Interest Group,又称“特别兴趣小组”),填补了中国电信在开源物联网终端操作系统生态领域的空白。中国电信也成为首个加入OpenHarmony开源社区的运营商。 13、2022年9月,工信部:鸿蒙操作系统装机量已超3亿台,从工业和信息化部20日举行的“大力发展新一代信息技术产业”新闻发布会获悉,近年来工信部大力支持操作系统发展。在服务器操作系统方面,推动服务器操作系统与主流CPU、数据库等软硬件的兼容适配,加快提高产品的国际竞争力,其中欧拉操作系统终端部署量超过170万套;在移动操作系统方面,支持骨干企业开展核心技术攻关,加快移动操作系统应用推广,其中鸿蒙操作系统装机量已超过3亿台。 14、2022年9月,华为首款鸿蒙家庭存储正式发布,2TB+2TB:2999.00,8TB+8TB:4999.00。 15、2022年10月,在工业和信息化部政府服务平台官网,华为终端有限公司申请入网了一款“5G数字移动电话机”,设备型号为NOH-AN80。 16、2022年11月,搭载HarmonyOS的华为设备已超过3.2亿,鸿蒙智联已有合作伙伴超过2200家,产品发货量超过2.5亿,全球鸿蒙生态开发者超过200万,HarmonyOS原子化服务多达5万个。 17、2023年1月,据统计鸿蒙系统的设备用户量已经超过了5.7亿。华为鸿蒙系统手机全球份额已经达到2%,已占据移动操作系统一席之地。成为全球第三大移动操作系统,正式开始与谷歌安卓、苹果iOS三分天下。74个华为设备接收到鸿蒙系统3稳定更新。包括P20系列、Mate 10系列、享系列等。 18、2023年4月,华为宣布了HarmonyOS 3的路线图,包括约150个旧设备。截至2023年4月,已有超过100个设备安装了稳定版HarmonyOS 3,另有39个设备仍在进行Beta测试。这是HarmonyOS 3的一项重大成就,所有这些设备平台现在都可以享受HarmonyOS带来的最新特性。包括智能手机、平板电脑、智能手表、音频设备和智能电视。 19、2023年,鸿蒙系统生态系统发展,华为和美团宣布合作开发鸿蒙系统原生应用。截至2023年8月,鸿蒙系统生态系统拥有超过7亿设备,超过220万开发者支持。 20、2023年,鸿蒙系统全球扩展,华为计划到2023年在20亿设备上安装鸿蒙系统。鸿蒙系统连接和OpenHarmony在这一增长中贡献巨大。 21、2023年,鸿蒙系统3.1版本,宣布了鸿蒙系统3.1版本,重点是ArkTS开发语言,API数量超过10,000个。 22、2023年,鸿蒙系统3升级计划,发布了2023年计划接收鸿蒙系统3更新的设备列表,包括华为P30系列、Mate 20系列和多款享系列机型。 23、2023年9月,鸿蒙之父王成录回答网友关于PC版鸿蒙的提问时,只回复了一个「有」字,让人满怀期待。鸿蒙PC操作系统可能将于2024年发布,引领一场新的PC革命,值得期待。 24、2023年11月,鸿蒙系统宣布下一代Next系统不再支持安卓,网易,美团开出4-6万月薪招聘鸿蒙工程师。 25、2023年12月20,开源鸿蒙开发者手机在装配工厂下线。 26、2023年12月26日报道,从华为内部人士了解到,除手机鸿蒙之外,PC端的鸿蒙操作系统已经接近完成(21财经),可以预测2024年华为将发布鸿蒙PC操作系统,鸿蒙将成为Windows,Linux,macOS后的第四大操作系统,相关的生态发展对开发者都是一个大的机会。 27、华为宣布,将在2024年1月18日,在北京、上海、杭州、南京、成都、厦门、武汉、长沙 8 大城市同时召开大会。届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章。新系统业内简称“纯血鸿蒙”,目前鸿蒙用户4.5亿。开源鸿蒙PC操作系统已经内测,2024年将正式发布。 28、2024年1月18日,华为常务董事、终端BG CEO余承东表示,鸿蒙生态设备数已到到8亿台+。发布原生HarmonyOS NEXT鸿蒙星河版操作系统,面向开发者全面开放申请。目前,首批200+鸿蒙原生应用已启动开发,包括便捷生活、出行文旅、金融理财 、社交资讯、生产力工具、影音娱乐、游戏等领域。 29、2024年6月21,华为开发者大会(HDC 2024)于6月21日至23日在东莞松山湖举行,主要聚焦于HarmonyOS NEXT全场景智能操作系统的发布和未来规划。发布全新的纯血鸿蒙HarmonyOS NEXT,支持鸿蒙原生智能全系列Ai生态。小艺升级为小艺智能体,实现意图交互框架。支持星盾安全架构,重新定义隐私安全,支持生态纯净(从源头构建新秩序),隐私可控(从权限到管数据),数据高安(从个人安全到协同安全),禁止开发九类不合理权限,每次访问允许,只单允许,分享转发实现系统级授权,只有指定的用户才能查看,转发无效。支持全局未成年人模式,一键切换所有数据内容为青少年内容。获得行业最高等级安全等级认证,鸿蒙内核 CC EAL 6+,HarmonyOS Next IP产品信息安全认证证书评估保障级(EAL)。余承东发文五年前8月9日,HarmonyOS重磅登场,1778天以来,经历4次重磅系统迭代,鸿蒙生态拥用了9亿多台设备、超过254万开发者,5000多个常用应用已全部启动开发。做有底座,有生态,真正的智能操作系统。 30、2024年6月21日发表仓颉编程语言。 仓颉编程语言助手(智谱清言智能体)基于华为仓颉官方数据,动态更新知识库 https://chatglm.cn/main/gdetail/667d249b8ef6d812fc36988e 仓颉编程语言白皮书 https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/cj-wp-abstract 仓颉编程语言开发指南 https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/89_u7f16_u7a0b_u8bed_u8a00_u5f00_u53d1_u6307_u5357 仓颉编程语言语言规约 https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/cj-lan-spec 仓颉编程语言库 API https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/libs_overview_ohos 仓颉编程语言教程介绍 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101718903607800132 31、2024年10月8日,华为HarmonyOS NEXT正式公测纯血鸿蒙向所有用户开放。微信鸿蒙生态版正式开始邀请内测,WPS鸿蒙版也开启内测,支付宝鸿蒙版发布。 32、2024年10月22日,华为在深圳湾体育中心发布HarmonyOS NEXT正式版,也称为鸿蒙5,余承东说 “我们实现了操作系统领域的全面突破!原生鸿蒙来了!”中国首个实现全栈自研的分布式智能操作系统,全球第三大移动操作系统,标志着我国在操作系统领域取得突破性进展。据介绍,HarmonyOS自2015年立项以来,华为数万名研发工程师,与上万家合作伙伴、百万开发者日夜攻关,帮助鸿蒙不断迭代完善。目前,HarmonyOS已历经四代发展,代码超过1.1亿行,覆盖生态设备超10亿台,在中国市场的份额已经超过iOS成为第二大操作系统,从2023年9月25日至今,鸿蒙原生应用和元服务核心厂商达到15000+。在原生智能方面,HarmonyOS NEXT将AI与操作系统深度融合,让AI能力无处不在。华为的智能助手小艺升级为小艺智能体,可执行更复杂的操作,并在端云大模型协同和意图框架的加持下获得更好的场景感知、意图识别和用户理解能力,能够帮助用户更好地获取所需个性化服务。此外,HarmonyOS NEXT在方舟引擎技术加持下,带来系统流畅、动效流畅、上网流畅,游戏和应用流畅的多维度流畅体验。“HarmonyOS NEXT通过深度整合软硬芯云,实现整机性能提升30%。”

9
0
0
浏览量33
chole

鸿蒙(HarmonyOS)开发之不申请权限访问相册图片

鸿蒙开发之不申请权限访问相册图片 访问相册图片介绍 在应用开发中,很多场景需要我们需要访问相册中的图片。例如:上传头像、上传银行卡、身份证资料、扫描文件功能、美颜功能等 所以访问相册里的图片成为我们必须要学习和掌握的内容。那如何访问相册图片呢? 在HarmonyOS中,鉴于对用户隐私的高度保护,要方便的完全读取相册与写入相册,需要极其复杂的权限审核。所幸,HarmonyOS也考虑到读取相册对于开发者而言也是一个非常常用的一个功能,因而提供了photoAccessHelper里的PhotoViewPicker来帮助开发者无需获得复杂权限的情况下来读取相册内容。 使用方法 导入相册管理模块 2. 实例化PhotoViewPicker对象(也即图片选择器对象) 3. 调用上述对象的select方法选择图片 这里可以看到调用select方法有两个参数:MIMEType、maxSelectNumberMIMEType即设置可以选哪些类型的媒体文件,可选值有 IMAGE_TYPE:图片类型,也即'image/*' VIDEO_TYPE:视频类型,也即'video/* 'IMAGE_VIDEO_TYPE:所有类型皆可,也即:'*/*' MOVING_PHOTO_IMAGE_TYPE:动态照片类型(实况图),也即'image/movingPhoto'maxSelectNumber就比较好理解了,就是设置可以选择多少数量,若不设置默认为50,最大也只能设置500 select方法是用Promise进行封装的,因此调用后有两种状态,成功进入then,失败进入catch进入then代表读取图片成功,读取到的结果是PhotoSelectResult类型的,这个类型有一个非常重要的属性,即为:photoUris,它是一个数组,里面保存了选择的资源的临时路径,像我们上面的代码,最大只允许选择1张图片,因此取下标0即为选择的图片或视频 用一个小界面测试一下 上面我们已经学了它的基本使用,我们用一个小界面测试一下。界面仅需放置一个Image用来展示选择后的图片,以及用一个按钮进行图片选择,代码如下 最终效果如下:成功将猫林老师的照片展示出来了 总结 如果需要不申请权限的情况下让app读取到系统图库里的图片,需使用photoAccessHelper 使用起来非常简单,仅需实例化PhotoViewPicker对象后再调用select方法即可 下篇猫林老师给大家介绍如何不申请权限的情况下写入照片到图库

44
0
0
浏览量916
chole

鸿蒙(HarmonyOS)开发之无须申请权限写入图片到相册

鸿蒙开发之不申请权限写入图片到相册 写入图片到相册介绍 在上一篇中,猫林老师给大家分享了如何在不申请权限的情况下读取相册内容。这一篇教大家如何写入图片到相册。 这在应用开发中,也是一个很常见的场景,比如我们要做一个文件扫描的功能。那是不是得把扫描的结果保存到图库呢?再比如我们做一个美颜的功能,那把相册里的原始图片读取出来后,经过我们的美容处理,是不是还得把美容后的结果写入回相册呢? 所以这也是我们必须要学习和掌握的内容。其实写入相册也是HarmonyOS管控的比较严的一个权限,但好在HarmonyOS依然考虑到写入相册对于开发者而言也是一个非常常用的一个功能,因而提供了两种方案来实现图片保存到相册,分别是: 安全控件保存 弹窗授权保存 安全控件保存 - 基本使用 这其实就是HarmonyOS提供的一个类似按钮一样的组件,他叫SaveButton,在界面上放一个它即可轻松实现保存,我们先看看它长啥样。我们在界面上写一个SaveButton,如下图 可以看到,从外形上看,就是一个带图标的按钮。当然,如果你要是觉得这个按钮的图标、文字不是你想要的,你还可以在使用时传递参数来修改。 对应的参数有 icon:设置图标,如果写SaveButton时写了{},并给了其他参数,唯独没给icon,则没有图标。如果要设置,仅能设置两个值,分别代表线条图标,填充图标。分别为:1SaveIconStyle.FULL_FILLEDSaveIconStyle.LINES这两个值没太大变化可以理解为前一个线条粗一条,后一个线条细一点 text: 设置文字,但是仅提供固定的几个文字让你选择,无法自定义。 buttonType:设置按钮样式、胶囊、圆形、普通(跟按钮的三大样式一样) 举个🌰,如下图 回到正题,如何使用它保存图片到相册呢?我们需要给它加点击事件 参数1:事件对象 参数2:用户授权结果,因为这个按钮自带弹框,问用户是否允许保存到图库,如下图。所以我们需要拿到用户的点击结果,只有点击了允许,我们才往下执行代码。那如何判断用户点了允许呢?就是根据SaveButtonOnClickResult,它有两个值:如果返回的结果是SUCCESS即为用户授权,如为:TEMPORARY_AUTHORIZATION_FAILED即为授权失败 安全控件保存 - 实现写入图片到图库(相册) 根据官方说明,需要两大步 调用MediaAssetChangeRequest类的的createImageAssetRequest方法创建一个资产变更请求 调用PhotoAccessHelper实例对象的 applyChanges方法,传入上述请求。用来提交本次媒体变更请求。 这里先解释下MediaAssetChangeRequest这个类,这个类是专门用来向系统做资产变更请求的。 那什么是手机资产呢?可以简单粗暴的理解为手机里的任意文件数据都是资产。比如图片是资产、视频也是资产。对资产做变更说人话就相当于是对这些文件做改变。所以,我们要写入一个图片到相册,就相当于是资产变更。就需要用到MediaAssetChangeRequest这个类。可是,根据我们刚刚说的,任意文件都叫资产,而我们这次要做的是给相册创建一张新图片,因此使用这个类的createImageAssetRequest方法,代表创建一个图片资产变更请求对象。 正如上面所说MediaAssetChangeRequest.createImageAssetRequest仅仅只是得到一个图片资产变更请求的对象,还得同意这个请求才行。怎么同意呢?即用PhotoAccessHelper实例对象的 applyChanges方法来向系统提交本次请求。 以上是对概念的解释,我们聊聊代码使用 MediaAssetChangeRequest类的的createImageAssetRequest方法需要传入两个参数。1. 当前上下文。 2. 图片的uri。 PhotoAccessHelper实例对象的 applyChanges方法,首先需要创建PhotoAccessHelper类的实例(这是一个专门用来管理相册的实例),再调用applyChanges。而PhotoAccessHelper的实例是通过photoAccessHelper.getPhotoAccessHelper方法,传入当前上下文对象得到的 对应代码如下 读取相册图片,并根据它创建一张一模一样的新图片写入到相册功能,代码如下 这一段代码不多,倒是概念需要理解。总而言之核心就是:准备一个创建图片的请求(通过URI指定创建什么图片),然后向系统提交本次请求 安全控件保存 - 优缺点总结 优点:代码简单,固定的两大步:创建请求、提交请求 缺点:必须再在界面上提供一个额外按钮,且此按钮无法深度自定义 弹窗授权保存 - 基本使用 这是一套不用在界面上额外添加按钮,或者也可以深度进行按钮定制的一套方式。 其开发步骤虽对比安全控件步骤略多,但依然属于比较简单实现的一种方式(我们后续如果做文档扫描功能,会用这种方式更恰当)。 我们来看看大概的实现步骤: 指定待保存到图库(相册)的图片URI 指定待保存照片的创建选项,包括文件后缀和照片类型,文件标题等 调用showAssetsCreationDialog,基于弹窗授权的方式获取媒体库的目标uri 将来源照片内容写入到媒体库的目标uri(需要用到fs文件流读取原图,写入目标图) 根据步骤,我们来看看大致实现代码,如下 这里因为篇幅关系,就不解释文件流了。跟Node、Java等语言中的文件流概念完全一致。无非就是读取、写入两套。这里略过不表。 这里需要解释的代码是:photoCreationConfigs用来设置写入到相册里的文件之文件名、文件类型、后缀等 showAssetsCreationDialog会出来一个弹窗 当然,如果你实在看不懂代码,猫林老师给你个绝招:这段代码你会复制即可。然后需要改的部分仅仅只有两处 来源图片URI也即srcFileUri这个变量,把这个变量改成你要写入到相册的原始图片路径。 photoCreationConfigs这个变量里,把要写入的新图片文件名改了 弹窗授权保存 - 实现写入图片到图库 我们继续实现一个读取相册图片,并根据它创建一张一模一样的新图片写入到相册功能,代码如下 import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { fileIo } from '@kit.CoreFileKit'; @Entry @Component struct Index { @State imgUri: string = '' build() { Column({ space: 20 }) { // 选择图片 Button('选择图片') .width('80%') .onClick(() => { // 实例化选择器 let photoPicker = new photoAccessHelper.PhotoViewPicker() // 开始选择图片,设置只允许选择图片,且最大选择1张 photoPicker.select({ MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE, maxSelectNumber: 1 }) .then((res: photoAccessHelper.PhotoSelectResult) => { // 读取成功则赋值给变量去展示到界面 this.imgUri = res.photoUris[0] }) .catch((err: Error) => { // 出错回调 console.log(err.message) }) }) Button('保存图片') .width('80%') .onClick(async () => { try { // 仅仅替换成我们想要写入的原本图片URI let srcFileUri = this.imgUri; // 因为接下来的方法需要传入的是来源URI数组,所以包装成数组 let srcFileUris: Array = [ srcFileUri ]; // 指定待保存照片的创建选项,包括文件后缀和照片类型,标题和照片子类型可选 let photoCreationConfigs: Array = [ { title: 'test', // 可选,文件名 fileNameExtension: 'jpg', // 文件后缀 photoType: photoAccessHelper.PhotoType.IMAGE, // 文件类型 } ]; // 获得当前上下文 let context = getContext(this); let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); // 基于弹窗授权的方式获取媒体库的目标uri // 这句代码会弹出一个窗提示框,并显示出待写入相册的图片,问用户是否允许保存 let desFileUris: Array = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs); // 设置一个写入文件流,文件位置为上面设置的相册位置 let desFile: fileIo.File = await fileIo.open(desFileUris[0], fileIo.OpenMode.WRITE_ONLY); // 设置一个读取文件流,文件位置为之前的来源图片URI let srcFile: fileIo.File = await fileIo.open(srcFileUri, fileIo.OpenMode.READ_ONLY); // 开始将读出来的文件流复制给写文件流(即往相册写内容) await fileIo.copyFile(srcFile.fd, desFile.fd); // 关闭文件流 fileIo.closeSync(srcFile); fileIo.closeSync(desFile); } catch (err) { console.error(`failed to create asset by dialog successfully errCode is: ${err.code}, ${err.message}`); } }) } .width('100%') .height('100%') } } 细心的读者已经发现了,这个代码仅仅就是复制基本使用里的代码,只是替换了srcFileUri这个变量的值。这也能实现图片写入。 总结 由于HarmonyOS对用户的隐私绝对保护,导致相册读写的权限难以申请。好在HarmonyOS提供了这种无须申请权限即可读取与写入相册的方法。 虽看代码感觉繁琐略多,但实际上代码都是固定的,例如上述的弹窗授权。我们仅需改改来源图片URI即可 本篇内容请一定要有印象。因为后续我们要是制作文档扫描功能会用到

36
0
0
浏览量976
chole

鸿蒙(HarmonyOS)原生AI能力之文本识别

鸿蒙原生AI能力之文本识别 原生智能介绍 在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等。 原生即指将一些能力直接集成在本地鸿蒙系统中,通过不同层次的AI能力开放,满足开发者的不同场景下的诉求,降低应用开发门槛,帮助开发者快速实现应用智能化 有哪些原生智能能力 基础视觉服务 基础语音服务 端侧模型部署 端侧推理 意图框架 ......... 基础视觉服务 - Core Vision Kit Core Vision Kit(基础视觉服务)是机器视觉相关的基础能力,接下来要导入的类,都在@kit.VisionKit中例如本篇要讲的文字识别即是如此。 文本识别介绍与使用 概念:将图片中的文字给识别出来 使用 textRecognition 实现文本识别 限制:仅能识别5种语言类型简体中文、繁体中文、英文、日文、韩文 使用步骤 1. 导入textRecognition 2. 实例化visionInfo对象,用来准备待识别的图片(需PixelMap类型)3. 实例化TextRecognitionConfiguration对象,设置识别配置(目前仅有是否开启朝向检测一项配置) 4. 调用textRecognition的recognizeText接口传入以上两个对象,开启识别并对识别结果进行处理,得到的是TextRecognitionResult类型结果,这个对象的value属性即为识别结果 这里解释一下这几步 你需要用textRecognition,所以需要先找到它,也即导入,这没什么好说的 你需要用它来帮你识别图片,那你是不是应该把需要识别的图片给它?所以第一个参数就是给他传递一个图片,只不过这个图片只能传PixelMap类型的(这就是为什么上篇我要写PixMap的原因),但是这个图片不能直接传,要包装成VisionInfo类型的对象(虽然目前为止,这个对象只有这一个属性,但保不齐未来会加)然后就是设置一下它识别的相关参数,它目前也只有一个参数,叫isDirectionDetectionSupported,设置是否开启朝向检测,因为有的图片可能是正的,有的图片可能是反的斜的。所以对于反的斜的图片如果这项开启为true,则会检测的更为准确。但是经过猫林老师肉测,其实开不开启扫描反的斜的图片,得到的结果都差不多了。所以可以看自己选择。顺便一提,这个参数可以不传,不传默认是true。然后猫林老师觉得:未来随着API发展,可能会多一些参数也说不准 最后即为调用其进行识别的方法,也即recognizeText开始识别 根据上面所说的,其实上面说的四步,也可以极简改为两步,代码如下 解释:这里就相当于没传第二个参数,它默认值即为true,也即开启朝向检测。 至于如何读取相册图片,以及把图片解码变成PixelMap,不是今天分享的主题,且之前猫林老师有两篇文章分别讲过不会的可以看之前文章,所以这里直接给代码(可看注释) 文本识别展示案例 我们来实现如下图的效果 结合上面说的使用方法,最终文本识别代码如下 总结 今天猫林老师给大家分享了鸿蒙提供的原生AI能力。其实听起来名字很高大上,用起来非常简单。这是因为鸿蒙帮我们做了高度封装,我们无须再关注OCR的相关知识,只需要使用鸿蒙提供的接口即可。所以,华为为了推广鸿蒙,发展鸿蒙生态,真的为开发者想了好多。这样的华为,你爱了吗? 友情提醒:本篇内容只适合用真机测试,模拟器无法出效果。 P.S:根据猫林老师肉测,在API12版本中的Mac模拟器成功出效果。其他版本都不行。所以建议有条件还是上真机。

26
0
0
浏览量730
chole

鸿蒙(HarmonyOS)开发之PixelMap介绍与实现图片变换

鸿蒙开发之PixelMap介绍与实现图片变换 本文所学技术可以用在哪 很多读者一看这个文章标题,可能根本不知道能干嘛,且不感兴趣。所以咱们先说说,今天写的这个技术有没有用。 首先,猫林老师即将给大家写的《原生AI之文字识别》就得用到这个知识。如果不学,等这篇文章面世时,各位可能有些代码看不懂。 其次,这个技术是实现一切图片处理的基石,比如你的App有个功能需要修改用户头像,而用户上传的图片可能会过大,那我们就需要对图片进行处理,例如裁剪,缩放,那必不可少的要用到这个技术。 最后,有些游戏的实现也依赖了这个技术,例如下图这种拼图游戏,就要用到本文的技术 (如上图所示,这游戏的核心技术就是:将一张完整大图裁剪打散变成多张小图,再通过玩家进行移动摆放拼成原图) P.S:若本文阅读量过万。猫林老师就出一篇文章或视频教大家如何开发这种游戏。(顺便,走过路过亲爱的读者们,麻烦点个关注点个赞点个收藏) 好了,言归正传,咱们本篇内容,正式开始! PixelMap是什么 在回答这个问题之前,大家有必要理解一些基础知识: 任何文件,包括图片和你电脑中的小电影,本质上都是二进制数据。 图片有多种格式,例如png、jpg、gif等 每种图片格式都有其独特优势和用途,例 根据以上信息可得,每种格式的图片,虽然展示的图像可能差别不是很大,但是因为他们的压缩算法和添加的内容有出入,每张图片的二进制表示形式排列规则绝对不一样 既然二进制排列不一样,各有各的规则,那么就意味着打开png格式的图片,要按照png的二进制规则去读取,电脑才能展现,同样打开jpg就要按照jpg的规则去读取去展现。以此类推 按不同的规则去打开对应格式图片的东西,可以叫图片解码器,所以不同格式图片有不同图片解码器。 根据以上结论,不知道有没有同学遇到过有些特定格式的图片系统默认情况下是打不开的。但是你装了某个软件后,他能打开了?现在能不能思考出原因? 没错,就因为系统默认只有一些常见的图片解码器,所以对于不常见或者某些企业自研图片格式就打不开。装完对应软件就能打开了是因为装的这个软件就是它对应的解码器。 好了,以上说了一大坨,回归我们的主题:PixelMap到底是个啥?跟上面说的有啥关系? 上面我们已经知道,不同格式的图片要想能打开就要用不同的规则去加载。那同样的道理,如果现在你要做图片裁剪功能,就意味着不同格式的图片得用不同的裁剪方式。这样就大大不利于开发。 正因此,需要一种统一的方式才好处理图片。而PixelMap正是提供了这种统一的方式,将这些不同格式的图像转换成一个可以直接操作的数据结构。也就相当于PixelMap是一种统一规则的像素结构,它内部根据一系列操作,把不同格式的图片还原成每个像素点的颜色和位置信息,并存在内存中。 所以PixelMap可以简单粗暴的理解为图片还原成像素后的一种数据,有了这种数据后不用再关心这张图片之前是什么格式什么规则。我们只需要对像素数据进行处理即可实现裁剪、缩放等功能! 好了,概念到此结束,以上听懂了是我讲得好。没听懂?那也没关系,不懂也完全不影响我们用。 如何把图片转为PixelMap 我们看看在HarmonyOS Next中如何通过代码来转换。 1. 首先需要导入image模块 2. 获取图片,我们以获取相册里的图片为例(上上篇文章讲过,不会可以去翻看) 3. 先用fileIo文件流打开图片,得到文件描述符(因为解码图片需要用文件描述符),并使用image模块里的createImageSource方法,传入读取到的图片文件描述符,得到解码后的图片,完了后记得关闭io流 4. 把解码后的图片调用createPixelMap方法转成PixelMap格式,异步的,记得加await,以及所在函数加async 经过这五步,我们就得到了一个图片所对应的PixelMap,我们可以用如下代码测试: 说明: 因为PixelMap本身就是表示像素信息的,因此也可以给Image组件显示 如何用PixelMap对图片进行裁剪 PixelMap图片数据。具有crop方法,即可进行裁剪,用法 x与y代表一个以左上角为原点的坐标,设置一个裁剪起点 size代表从上面这个起点开始,裁剪多大的区域 如再上例代码得到PixelMap后我们加一句代码,即 可观察到下图效果 PixelMap其他操作方法 scale translate rotate flip(false, true) flip(true, false) opacity 总结 PixelMap是将图片解码后得到的像素数据,方便对图片进行操作 本篇是其他文章的基石,例如拼图游戏。 最后,都看到这了,给个关注、点赞、收藏不过分吧?

22
0
0
浏览量538
ciiiiinema

如何为一个组件同时绑定单击和双击事件?

如何为一个组件同时绑定单击和双击事件

0
1
0
浏览量215
九久九

Socket连接中支持发送哪些数据类型?

Socket连接中支持发送哪些数据类型

0
1
0
浏览量209
加班使我熟睡

如何实现多行输入?

如何实现多行输入

0
1
0
浏览量208
猫界袁隆平

将rawfile中json格式的字符串转换成对应的object对象后,调用实例方法后程序崩溃?

问题现象 直接报错:"jscrash happened in xxxxxxxxx",crash日志中错误信息:"Error message: Unexpected Object in JSON"。

0
1
0
浏览量203