Per scopi di test, ho copiato l'intero esempio trovato su phonegap camera API e ho messo un avviso su onPhotoDataSuccess
per verificare quando la funzione è stata attivata. Nella prima foto scattata l'avviso non verrà visualizzato. Tuttavia, dopo il primo tentativo, l'avviso verrà visualizzato dopo il salvataggio della foto.PhoneGap (3.0.0) Fotocamera non riuscita al primo tentativo
Qualche consiglio? Sarò felice di essere più specifico se qualcosa non è chiaro.
Ho testato il codice qui sotto sul mio Galaxy S3 Android
<!DOCTYPE html>
<html>
<head>
<title>Capture Photo</title>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
var pictureSource; // picture source
var destinationType; // sets the format of returned value
// Wait for device API libraries to load
//
document.addEventListener("deviceready",onDeviceReady,false);
// device APIs are available
//
function onDeviceReady() {
pictureSource=navigator.camera.PictureSourceType;
destinationType=navigator.camera.DestinationType;
}
// Called when a photo is successfully retrieved
//
function onPhotoDataSuccess(imageData) {
// Uncomment to view the base64-encoded image data
// console.log(imageData);
// Get image handle
//
var smallImage = document.getElementById('smallImage');
// Unhide image elements
//
smallImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
smallImage.src = "data:image/jpeg;base64," + imageData;
}
// Called when a photo is successfully retrieved
//
function onPhotoURISuccess(imageURI) {
// Uncomment to view the image file URI
// console.log(imageURI);
// Get image handle
//
var largeImage = document.getElementById('largeImage');
// Unhide image elements
//
largeImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
largeImage.src = imageURI;
}
// A button will call this function
//
function capturePhoto() {
// Take picture using device camera and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
destinationType: destinationType.DATA_URL });
}
// A button will call this function
//
function capturePhotoEdit() {
// Take picture using device camera, allow edit, and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true,
destinationType: destinationType.DATA_URL });
}
// A button will call this function
//
function getPhoto(source) {
// Retrieve image file location from specified source
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
destinationType: destinationType.FILE_URI,
sourceType: source });
}
// Called if something bad happens.
//
function onFail(message) {
alert('Failed because: ' + message);
}
</script>
</head>
<body>
<button onclick="capturePhoto();">Capture Photo</button> <br>
<button onclick="capturePhotoEdit();">Capture Editable Photo</button> <br>
<button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br>
<button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">From Photo Album</button><br>
<img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
<img style="display:none;" id="largeImage" src="" />
</body>
</html>
---------- UPDATE 1 ----------------- -
ho testato su un altro pezzo di codice:
(function() {
$scroller = $('.scroller'),
// Take a picture using the camera or select one from the library
takePicture = function (e) {
var options = {
quality: 45,
targetWidth: 1000,
targetHeight: 1000,
destinationType: Camera.DestinationType.FILE_URI,
encodingType: Camera.EncodingType.JPEG,
sourceType: Camera.PictureSourceType.CAMERA
};
navigator.camera.getPicture(
function (imageURI) {
console.log(imageURI);
alert('test');
$scroller.append('<img src="' + imageURI + '"/>');
},
function (message) {
// We typically get here because the use canceled the photo operation. Fail silently.
}, options);
return false;
};
$('.camera-btn').on('click', takePicture);
}());
E questo ha lo stesso effetto. Non fa nulla durante il primo scatto ma mostra l'immagine dopo il secondo scatto. Ho anche appena scoperto che l'immagine che mostra dopo il secondo è lo snap è la prima foto che ho scattato. Sembra che il primo argomento in getPicture non si attivi sul primo snap. Questo è frustrante in quanto logcat in realtà non mi mostra nulla su cui lavorare.
---------------- ---------------- UPDATE 2
ho appena provato su PhoneGap Costruire e Funziona. Quindi deve avere qualcosa a che fare con il plugin ...
potrebbe davvero usare una risposta qui se qualcuno sa. È questo per 3.0.0 o 3.0.0rc1? –
Potresti incollare il codice che stai usando e dirci con quale telefono stai provando. – Zorayr
Stai sviluppando per iOS? Da [PhoneGap docs] (http://docs.phonegap.com/en/3.0.0/cordova_camera_camera.md.html#camera.getPicture): "L'inclusione di un avviso JavaScript() in una delle funzioni di callback può causare problemi . Avvolgere l'avviso all'interno di un setTimeout() per consentire al selettore di immagini iOS o al popover di chiudere completamente prima che venga visualizzato l'avviso: "Se si modifica l'avviso su console.log, la prima callback funziona? – ville