鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题
一、运行环境
1、硬件
手机型号:NOVA 7
系统:HarmonyOS版本 4.0.0
2、软件
android SDK platforms:14.0(API Level 34)、13.0(API Level 33)
SDK Build-Tools: 33.0.3
JDK 17
Cordova-android-version:12.0.1
cordova-plugin-camera:7.0.0
二、运行拍照功能错误并且图片仅显示为图标
在基于cordova平台采用cemara最新版本插件开发拍照功能时,出现以下错误:
用推荐的FILE_URI模式,显示图库图片时,只显示为一个图标,不能正确显示图片;
并且运行"拍照"功能,会出现错误:
三、问题解决
对于FILE_URI只显示图标,可能原因为Android11后限制了目录访问权限?(有待研究)
解决方法:
1、拍照和显示图库都选为DATA_URL方式
2、拍照出错,根据harmonyOS和android的对应版本关系,harmonyOS对应android12(API Level31)
因此,在sdk manager中选择安装了SDK Platform:android12(API Level31)
然后重新新建工程、新增platform和插件,拷入源码运行,拍照功能正常!
目前系统运行环境为:
程序index.js的关键部分源码如下:
cpp
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
// Cordova is now initialized. Have fun!
document.getElementById("takePicture").addEventListener("touchend", function() {
navigator.camera.getPicture(onSuccess, onFail, {
quality: 50,
// destinationType: Camera.DestinationType.FILE_URI,
destinationType: Camera.DestinationType.DATA_URL,
sourceType: Camera.PictureSourceType.CAMERA,
correctOrientation: true
});
});
//Use from Library
document.querySelector("#usePicture").addEventListener("touchend", function() {
navigator.camera.getPicture(onSuccess, onFail, {
quality: 50,
sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
destinationType: Camera.DestinationType.DATA_URL//FILE_URI会显示为图标
});
});
function onSuccess(imageData) {
var image = document.getElementById('myImage');
image.src = "data:image/jpeg;base64," + imageData;//DATA_URL模式
// image.src = imageData;//FILE_URI模式
}
function onFail(message) {
alert('错误:'+message);
}
}