0

我的应用程序中有以下代码来上传图片(使用相机或从图库中选择)。它在我的 Google Nexus 选项卡 4.3.0 中运行良好,但在我拍照或从图库中选择图片时,它在三星移动 4.1.2 中崩溃。我尝试按照互联网上的建议进行许多更改,但都没有奏效。任何想法?

<script type="text/javascript" charset="utf-8">

var deviceReady = false;

/**
 * Take picture with camera
 */
function takePicture() {
    navigator.camera.getPicture(
        function(uri) {
            var img = document.getElementById('camera_image');
            img.style.visibility = "visible";
            img.style.display = "block";
            img.src = uri;
            document.getElementById('camera_status').innerHTML = "Success";
        },
        function(e) {
            console.log("Error getting picture: " + e);
            document.getElementById('camera_status').innerHTML = "Error getting picture.";
        },
        { quality: 50, destinationType: navigator.camera.DestinationType.FILE_URI});
};

/**
 * Select picture from library
 */
function selectPicture() {
    navigator.camera.getPicture(
        function(uri) {
            var img = document.getElementById('camera_image');
            img.style.visibility = "visible";
            img.style.display = "block";
            img.src = uri;
            document.getElementById('camera_status').innerHTML = "Success";
        },
        function(e) {
            console.log("Error getting picture: " + e);
            document.getElementById('camera_status').innerHTML = "Error getting picture.";
        },
        { quality: 50, destinationType: navigator.camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY});
};

/**
 * Upload current picture
 */
function uploadPicture() {

    // Get URI of picture to upload
    var img = document.getElementById('camera_image');
    var imageURI = img.src;
    if (!imageURI || (img.style.display == "none")) {
        document.getElementById('camera_status').innerHTML = "Take picture or select picture from library first.";
        return;
    }

    // Verify server has been entered
    server = document.getElementById('serverUrl').value;
    if (server) {

        // Specify transfer options
        var options = new FileUploadOptions();
        options.fileKey="file";
        options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
        options.mimeType="image/jpeg";
        options.chunkedMode = false;

        // Transfer picture to server
        var ft = new FileTransfer();
        ft.upload(imageURI, server, function(r) {
            document.getElementById('camera_status').innerHTML = "Upload successful: "+r.bytesSent+" bytes uploaded.";              
        }, function(error) {
            document.getElementById('camera_status').innerHTML = "Upload failed: Code = "+error.code;               
        }, options);
    }
}

/**
 * View pictures uploaded to the server
 */
function viewUploadedPictures() {

    // Get server URL
    server = document.getElementById('serverUrl').value;
    if (server) {

        // Get HTML that lists all pictures on server using XHR 
        var xmlhttp = new XMLHttpRequest();

        // Callback function when XMLHttpRequest is ready
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState === 4){

                // HTML is returned, which has pictures to display
                if (xmlhttp.status === 200) {
                    document.getElementById('server_images').innerHTML = xmlhttp.responseText;
                }

                // If error
                else {
                    document.getElementById('server_images').innerHTML = "Error retrieving pictures from server.";
                }
            }
        };
        xmlhttp.open("GET", server , true);
        xmlhttp.send();         
    }   
}

/**
 * Function called when page has finished loading.
 */
function init() {
    document.addEventListener("deviceready", function() {deviceReady = true;}, false);
    window.setTimeout(function() {
        if (!deviceReady) {
            alert("Error: PhoneGap did not initialize.  Demo will not run correctly.");
        }
    },2000);
}

</script>
4

1 回答 1

1

我遇到了同样的问题,我通过停用开发人员选项或取消选中“不保留活动”来解决它,因为一旦启动相机,它就会杀死应用程序并且它无法再次恢复它。

你可以参考这个答案: Phonegap Capture not working for jelly bean

于 2013-12-17T12:26:48.843 回答