PhoneGap Windows 8 App, с функциональностью камеры, функция обратного вызова navigate.camera.getPicture() никогда не вызывается при развертывании
Мы сделали приложение для Win8, используя телефонный разрыв. Приложение также имеет ссылку на компонент среды выполнения Windows, используемый для выполнения некоторых асинхронных задач. В приложении есть функция камеры, при которой в камере вызывается, делается снимок, а затем изображение отображается на экране в функции обратного вызова. Все работает отлично при запуске прямо из Visual Studio Express. Проблема возникает, когда мы создаем пакет приложения и разворачиваем его с помощью либо бокового загрузчика Metro, либо PowerShell. Функция обратного вызова камеры не вызывается. Код для вызова камеры выглядит примерно так:
CameraService = function() {
var that = {};
that.invokecamera = function(callback) {
try {
GLOBALS.callback = callback;
if (GLOBALS.Ready) {
navigator.camera.getPicture(that.onSuccess, GLOBALS.ThrowException, {
quality : 50,
saveToPhotoAlbum : true,
destinationType : Camera.DestinationType.FILE_URI
});
}
} catch (err) {
alert(err);
} finally {
}
}
that.onSuccess=function(imageURI) {
GLOBALS.ImagePath = imageURI;
GLOBALS.callback(imageURI);
}
return that;
}
1 ответ
Итак, я понял проблему, упомянутую здесь:
проблема с установленным приложением
Чтобы это исправить, я, как упоминалось в ссылке, заменил
Windows.Storage.StorageFolder.getFolderFromPathAsync(packageId.path).done(function (storageFolder) {
С
var storageFolder = Windows.Storage.ApplicationData.current.localFolder;
В файле cordova.js. Я использую Cordova 2.4.0.
Более сложный пример
Windows.Storage.StorageFolder.getFolderFromPathAsync(packageId.path).done(function (storageFolder) {
storageFolder.createFileAsync(tempPhotoFileName, Windows.Storage.CreationCollisionOption.generateUniqueName).done(function (file) {
file.openAsync(Windows.Storage.FileAccessMode.readWrite).done(function (fileStream) {
Windows.Storage.Streams.RandomAccessStream.copyAndCloseAsync(_stream, fileStream).done(function () {
var _imageUrl = URL.createObjectURL(file);
successCallback(_imageUrl);
}, function () { errorCallback("Resize picture error."); });
}, function () { errorCallback("Resize picture error."); });
}, function () { errorCallback("Resize picture error."); });
});
становится
var storageFolder = Windows.Storage.ApplicationData.current.localFolder;
storageFolder.createFileAsync(tempPhotoFileName, Windows.Storage.CreationCollisionOption.generateUniqueName).done(function (file) {
file.openAsync(Windows.Storage.FileAccessMode.readWrite).done(function (fileStream) {
Windows.Storage.Streams.RandomAccessStream.copyAndCloseAsync(_stream, fileStream).done(function () {
var _imageUrl = URL.createObjectURL(file);
successCallback(_imageUrl);
}, function () { errorCallback("Resize picture error."); });
}, function () { errorCallback("Resize picture error."); });
}, function () { errorCallback("Resize picture error."); });