Я занимаюсь разработкой мобильного приложения с использованием Appcelerator Titanium Alloy. Приведенный ниже код открывает камеру, позволяет пользователю сделать снимок и успешно прикрепляет его к шаблону электронной почты на всех устройствах iOS и на большинстве устройств Android, с которыми я смог протестировать, включая Motorola, LG, Panasonic, Samsung ( не s-серия отлично работает). Когда я пытаюсь открыть камеру на определенных устройствах (пока только Samsung S7 и Google Pixel, но мой доступ к устройствам ограничен), я получаю сообщение об ошибке:
[ОШИБКА]: TiMedia: (KrollRuntimeThread) [12968,135705] Не удалось создать каталог внешнего хранилища.
Я вижу эту ошибку в Appcelerator Studio и на устройстве вижу всплывающее сообщение «Пожалуйста, запустите этот тест на устройстве», что означает, что оно должно возвращать true в строке if (error.code == Titanium.Media.NO_CAMERA)
ниже.
На данный момент я уже запросил разрешения для внешнего хранилища и камеры. Я не могу понять, почему это происходит только на определенных устройствах, и это не похоже на конкретную версию ОС Android. Любая помощь будет оценена.
var takePic = Ti.UI.createButton({
width : 127,
height : 42,
bottom : 50,
left : 8,
title : 'Take a picture',
color : "#fff",
backgroundColor : "#555555",
borderColor : "#FFFFFF",
borderRadius : "10px",
borderWidth : "1px"
});
takePic.addEventListener('click', function(e) {
var win = Titanium.UI.createWindow({//Open Camera
});
Titanium.Media.showCamera({
success : function(event) {
if (event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) {
win = Titanium.UI.currentWindow;
if (osName == "android") {
var img_view = Titanium.UI.createImageView({
height : '100%',
width : '100%',
});
win.add(img_view);
}
try {
picURL = event.media;
picRaw = event.media;
pictureSet = true;
$.videoButton.enabled = false;
$.videoButton.backgroundColor = "#DDDDDD";
$.savePic.show();
format = "Picture";
} catch(e) {
alert("An Error:" + e.message);
}
} else {
var alert = createErrorAlert({
text : "An error occured getting the media. Please check file size and format and try again."
});
$.yesLatLon.add(alert);
alert.show();
}
},
cancel : function() {
//called when user cancels taking a picture
},
error : function(error) {
//called when there's an error
var a = Titanium.UI.createAlertDialog({
title : 'Camera'
});
if (error.code == Titanium.Media.NO_CAMERA) {
a.setMessage('Please run this test on device');
} else {
a.setMessage('Unexpected error: ' + error.code);
}
a.show();
},
saveToPhotoGallery : true,
allowEditing : false,
autohide : true, //Important!
mediaTypes : [Ti.Media.MEDIA_TYPE_PHOTO]
});
alert.hide();
});