我创建了一个简单的cordova应用程序并在Windows手机上测试相机插件。 我的相机插件版本为1.2.0
我可以从照片库中选择照片,但如果我尝试从照相机拍摄照片,则会出现以下错误
任何想法我能做什么?
THX&此致!
答案 0 :(得分:3)
此问题已通过提交110b3b3修复。希望它有所帮助!
答案 1 :(得分:0)
我认为这是因为创建的图片对象被某些东西阻止,因此fileIO.readBufferAsync无法使用该对象。根据MS官方样本的测试结果,我检查了文件plugins/cordova-plugin-camera/src/windows/CameraProxy.js
中的代码,我发现与MS官方样本没有太大区别。我找到的唯一一个是在CameraProxy.js中的一次调用中创建和读取的文件,但在MS示例中,它们是两次调用。
在我将以下代码更改后,它开始工作。请在我上面提到的文件中的第692行找到以下代码:
fileIO.readBufferAsync(picture).done(function(buffer) {
var strBase64 =encodeToBase64String(buffer);
picture.deleteAsync().done(function() {
successCallback(strBase64);
}, function(err) {
errorCallback(err);
});
}, errorCallback);
并将其更改为以下代码:
var tempFolder = getAppData().temporaryFolder;
tempFolder.getFileAsync(picture.name).done(
function (file) {
// If file exists.
var a = file;
fileIO.readBufferAsync(picture).done(function (buffer) {
var strBase64 = encodeToBase64String(buffer);
picture.deleteAsync().done(function () {
successCallback(strBase64);
}, function (err) {
errorCallback(err);
});
}, errorCallback);
},
function (err) {
}
)
答案 2 :(得分:0)
我将CameraProxy.js中的代码更改为
var tempFolder = getAppData().temporaryFolder;
tempFolder.getFileAsync(picture.name).done(
function(file) {
// If file exists.
var a = file;
fileIO.readBufferAsync(picture).done(function(buffer) {
var strBase64 = encodeToBase64String(buffer);
picture.deleteAsync().done(function() {
successCallback(strBase64);
}, function(err) {
errorCallback(err);
});
}, errorCallback);
},
function(err) {
}
);
并得到了同样的错误。
这是我打电话来访问相机的打字稿
export function getPictureFromCamera() {
navigator.camera.getPicture((data: string) => {
$('#image').attr("src", "data:image/jpeg;base64," + data);
}, error => {
$('#error').text(error);
},
{
quality: 100,
destinationType: Camera.DestinationType.DATA_URL,
sourceType: Camera.PictureSourceType.CAMERA,
allowEdit: true,
encodingType: Camera.EncodingType.JPEG,
targetWidth: 300,
targetHeight: 300,
saveToPhotoAlbum: false
});
}
我的另一个解决方法是我可以从照片库中调用相机
这适合我,因为在我接受了我的应用程序代码中的图片之后。
此致