介绍
本示例介绍如何在HTML页面中拉起原生相机进行拍照,并获取返回的图片。
效果预览图

使用说明
- 点击HTML页面中的选择文件按钮,拉起原生相机进行拍照。
- 完成拍照后,将图片在HTML的img标签中显示。
实现思路
- 添加Web组件,设置onShowFileSelector属性,接收HTML页面中input的点击事件。在onShowFileSelector中调用invokeCamera接口,拉起原生相机进行拍照,并通过callback回调方法获得照片的uri。然后将uri放在FileSelectorResult中,通过event参数返回给HTML页面。
...
Web({ src: $rawfile(LOCAL_HTML_PATH), controller: this.controller }).onShowFileSelector((event: FileResult) => { this.invokeCamera(((uri: string) => {event?.result.handleFileList([uri]);}))return true;})
...
- 实现invokeCamera接口,拉起原生相机,并通过callback回调方法返回拍照结果。
invokeCamera(callback: (uri: string) => void) {const context = getContext(this) as common.UIAbilityContext;let want: Want = {action: ACTION_IMAGE_CAPTURE,parameters: {"callBundleName": context.abilityInfo.bundleName,}};let result: (error: BusinessError, data: common.AbilityResult) => void = (error: BusinessError, data: common.AbilityResult) => {if (error && error.code !== 0) {logger.error(`${TAG_CAMERA_ERROR} ${JSON.stringify(error.message)}`);return;}let resultUri: string = data.want?.parameters?.resourceUri as string;if (callback && resultUri) {callback(resultUri);}}context.startAbilityForResult(want, result);
}
- 在HTML页面中添加input标签,并在onChange属性中添加js方法,通过dom tree返回的描述事件相关信息的event对象接收ArkTS返回的照片,并显示在img标签上。
<script>function showPic() {let event = this.event;let tFile = event ? event.target.files : [];if (tFile === 0) {document.getElementById('image_preview').style.display = 'block';document.getElementById('image_preview').innerHTML = "未选择图片";return}document.getElementById('image').setAttribute('src', URL.createObjectURL(tFile[0]));document.getElementById('image_preview').style.display = 'block';document.getElementById('image').style.display = 'block';}
</script>
<input ref="camera" type="file" id="upload" name="upload" accept="image/*" capture="upload" onchange="showPic()" />
<p id="image_preview">图片预览</p>
<img id="image">
工程结构&模块类型
   webgetcameraimage                                           // har类型|---mainpage|   |---MainPage.ets                                       // ArkTS页面|---rawfile|   |---camera.html                                        // HTML页面
模块依赖
utils
routermodule
参考资料
Web组件
也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线【包含了大厂APP实战项目开发】。
本路线共分为四个阶段:
第一阶段:鸿蒙初中级开发必备技能

第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH
 

第三阶段:应用开发中高级就业技术

第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH
 

《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
 2.构建第一个ArkTS应用
 3.……

开发基础知识:gitee.com/MNxiaona/733GH
 
1.应用基础知识
 2.配置文件
 3.应用数据管理
 4.应用安全管理
 5.应用隐私保护
 6.三方应用调用管控机制
 7.资源分类与访问
 8.学习ArkTS语言
 9.……

基于ArkTS 开发
1.Ability开发
 2.UI开发
 3.公共事件与通知
 4.窗口管理
 5.媒体
 6.安全
 7.网络与链接
 8.电话服务
 9.数据管理
 10.后台任务(Background Task)管理
 11.设备管理
 12.设备使用信息统计
 13.DFX
 14.国际化开发
 15.折叠屏系列
 16.……

鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH
 

鸿蒙入门教学视频:

美团APP实战开发教学:gitee.com/MNxiaona/733GH
 

写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:gitee.com/MNxiaona/733GH
