HarmonyOS 鸿蒙Next 开发,webview 中调用鸿蒙原生拍照功能并在拍照成功后返回 file:// URI 地址,在 webview H5 中展示该 URI 地址
HarmonyOS 鸿蒙Next 开发,webview 中调用鸿蒙原生拍照功能并在拍照成功后返回 file:// URI 地址,在 webview H5 中展示该 URI 地址
你好 需要获取绝对路径file://media/Photo/296/IMG_1727660839_245/IMG_20240930_094539.jpg这种需要转成沙箱路径 然后在进行web加载 H5中不能直接使用沙箱路径显示图片,可以将图片转为base64显示
可参考如下示例:
本示例介绍如何在HTML页面中拉起原生相机进行拍照,并获取返回的图片。
https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/webgetcameraimage
/******/ H5中不能直接使用沙箱路径显示图片,可以将图片转为base64显示。
nativeCamera参考如下代码:
nativeCamera(args: string, handler: CompleteHandler)
{
PickerUtil.camera().then((uri) => {
console.debug("测试相机2", uri)
const context = getContext(this) as common.UIAbilityContext;
let sanFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
const destPath = `${context.filesDir}/test${new Date().getTime()}.jpg`;
fs.copyFileSync(sanFile.fd, destPath);
let array: ArrayBuffer = new ArrayBuffer(fs.statSync(sanFile.fd).size)
fs.readSync(sanFile.fd, array)
let unit = new Uint8Array(array)
let base64 = new util.Base64Helper();
let base64Str = "data:image/png;base64," + base64.encodeToStringSync(unit);
handler.complete(base64Str)
console.debug("测试相机2", destPath, base64Str)
}).catch((err: BusinessError) => {
console.debug("测试相机异常", JSON.stringify(err))
})
}
你好 如果不转成base64 获取绝对路径直接用web加载也行
还可以参考这样 h5加载相册图片需要转成流 类似这样
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" charset="utf-8">
</head>
<script>
function onFileSelect(input) {
var file = input.files[0];
console.log();
if(window.FileReader){
var fr = new FileReader();
fr.readAsDataURL(file);
fr.onloadend = function(){
document.getElementById("img").src = fr.result;
}
}
}
</script>
<body>
<img style="width: 200px" id="img" src="">
<form id="upload-form" enctype="multipart/form-data">
<input type="file" id="upload" accept="image/*" name="upload" onchange="onFileSelect(this)" />
<input type="file" accept="image/*" capture="camera" />
</form>
</body>
</html>
在HarmonyOS鸿蒙Next开发中,要在webview中调用鸿蒙原生拍照功能并在拍照成功后返回file://
URI 地址,并在webview H5中展示该URI地址,你可以通过以下步骤实现:
-
创建拍照功能接口:首先,在鸿蒙原生代码中创建一个拍照功能接口,通过Intent或Ability启动拍照界面,并在拍照完成后获取图片的
file://
URI。 -
传递URI给webview:拍照成功后,将图片的
file://
URI通过JavaScript接口传递给webview。这通常涉及到在鸿蒙应用中定义一个JavaScript接口,并通过webview的addJavascriptInterface
方法将其暴露给H5页面。 -
在H5页面中展示URI:在webview加载的H5页面中,通过JavaScript接收鸿蒙原生传递过来的URI,并使用
<img>
标签或其他方式展示图片。 -
处理权限问题:确保在鸿蒙应用中已经申请并获得了必要的权限,如读写存储权限,以确保拍照功能能够正常工作并保存图片。
-
测试与调试:在真机或模拟器上测试该功能,确保拍照、返回URI和展示图片的流程能够顺利进行。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html