科尔多瓦相机对象为空

时间:2014-12-04 20:27:51

标签: cordova camera ionic-framework

我可以使用cordova-plugin-camera中的相机插件从我的移动设备拍摄照片,但是在指定相机选项时出现问题。

我在我的控制器中尝试了以下操作,以查看Camera对象具有哪些键:

$ionicPlatform.ready(function() {
    for (var key in Camera) {
        alert(key);
    }
});

它只返回getPicture()方法。缺少其他键,例如“EncodingType”或“MediaType”。当我填充cameraExport对象并且所有内容都正确填充(EncodingType等等都可用)时,我去了相机库中的Camera.js中的日志。当它到达我的控制器时它就不可用了。

当我尝试引用Camera.EncodingType.JPEG时 - 我得到“无法读取未定义的属性JPEG。”

我尝试卸载插件并通过git url重新安装它,并尝试使用org.apache.cordova.camera方法(卸载后)。我更新了离子库。创建了新项目,希望这只是一个配置错误。

这是一个示例控制器,我把它放在一起也有问题:

.controller('PhotoCtrl', function($scope, $state, $ionicPlatform, Camera) {
    $ionicPlatform.ready(function() {
        alert(JSON.stringify(Camera)); // This just shows empty brackets: {}
    });

    $scope.getPhoto = function() {
        try {
            // Errors with this alert - if I take it out, it will allow me to take a picture
            alert(Camera.EncodingType.JPEG); 
            Camera.getPicture().then(function(photoUri) {
                alert(photoUri);
            }, function(err) {
                console.err(err);
            },
            {
                // Again, if I remove the Camera.EncodingType.JPEG, it will save the picture
                encodingType: Camera.EncodingType.JPEG,
                // These don't work either. Almost like the options aren't being applied.
                correctOrientation: true,
                saveToPhotoAlbum: true
            });
        }
        catch(err) {
            // Throws the "Cannot read property JPEG of undefined."
            alert(err);
        }
    };
})

有什么想法吗?

如果我能提供更多信息,请告诉我。

提前致谢!

1 个答案:

答案 0 :(得分:1)

事实证明我的Camera对象是一个工厂制作的对象。我只是忘了从navigator.camera添加常量。

卫生署!

.factory('Camera', ['$q', function($q) {
    return {
        getPicture: function(options) {
            var q = $q.defer();
            navigator.camera.getPicture(function(result) {
                // Do any magic you need
                q.resolve(result);
            }, function(err) {
                q.reject(err);
            }, options);
            return q.promise;
        },
        // Forgot the following
        EncodingType: navigator.camera.EncodingType,
        DestinationType: navigator.camera.DestinationType,
        MediaType: navigator.camera.MediaType,
        PictureSourceType: navigator.camera.PictureSourceType,
        PopoverArrowDirection: navigator.camera.PopoverArrowDirection,
        Direction: navigator.camera.Direction
    }
}])