2017-09-12 1 views
0

Je deviens fou avec mon application.DevExtreme/Phonegap caméra plugin: "Impossible de lire la présentation 'getPicture' de undefined"

J'utilise DevExtreme, basé sur PhoneGap.

Je voudrais prendre la photo avec l'appareil photo dans mon application, mais j'ai quelques ennuis.

Tout d'abord, voici mon config.xml.

<widget id="com.devexpress.apptemplate" version="1.0" versionCode="1"> 
    <name>ApplicationTemplate</name> 
    <description>Template</description> 
    <preference name="permissions" value="none" /> 
    <preference name="prerendered-icon" value="true" /> 
    <preference name="android-windowSoftInputMode" value="adjustPan" /> 
    <preference name="SplashScreenDelay" value="60000" /> 
    <preference name="AutoHideSplashScreen" value="false" /> 
    <preference name="SplashShowOnlyFirstTime" value="false" /> 
    <preference name="FadeSplashScreen" value="false" /> 
    <preference name="ShowSplashScreenSpinner" value="false" /> 
    <preference name="DisallowOverscroll" value="true" /> 
    <preference name="StatusBarOverlaysWebView" value="false" /> 
    <preference name="StatusBarBackgroundColor" value="#000000" /> 
    <preference name="android-minSdkVersion" value="14" /> 
    <preference name="android-targetSdkVersion" value="22" /> 
    <plugin name="cordova-plugin-camera" spec="^2.4.1" source="npm" /> 
    <plugin name="cordova-plugin-splashscreen" onload="true" /> 
    <plugin name="cordova-plugin-whitelist" /> 
    <plugin name="cordova-plugin-ios-longpress-fix" /> 
    <plugin name="cordova-plugin-statusbar" onload="true" /> 
    <access origin="*" /> 
</widget> 

Vous voyez quelque chose ne va pas ici?

De plus, j'ai un bouton pour appeler la fonction appareil photo (copié à partir d'un tutoriel):

// Called when a photo is successfully retrieved 
// 
function onPhotoDataSuccess(imageData) { 
    try 
    { 
     // 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; 
    } 
    catch (err) { 
     alert(err.message); 
    } 
} 

// Called when a photo is successfully retrieved 
// 
function onPhotoFileSuccess(imageData) { 
    // Get image handle 
    console.log(JSON.stringify(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 = 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 capturePhotoWithData() { 
    try { 
     // Take picture using device camera and retrieve image as base64-encoded string 
     navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 }); 
    } 
    catch (err) { 
     alert(err.message); 
    } 
} 
function capturePhotoWithFile() { 
    navigator.camera.getPicture(onPhotoFileSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI }); 
} 

// A button will call this function 
// 
function getPhoto(source) { 
    debugger; 
    // Retrieve image file location from specified source 
    navigator.camera.getPicture(onPhotoURISuccess, onFail, { 
     quality: 50, 
     destinationType: OverviewAPP.destinationType.FILE_URI, 
     sourceType: source 
    }); 
} 
// Called if something bad happens. 
// 
function onFail(message) { 
    alert('Failed because: ' + message); 
} 

Et voici mon connexes HTML:

[...] 
<div class="myBtnPhoto" data-bind="dxButton: { text: 'Conferma con foto', onClick: capturePhotoWithData}" style="float:right;"></div> 
[...] 
<img style="display:none;width:60px;height:60px;" id="smallImage" src="" /> 
<img style="display:none;" id="largeImage" src="" /> 
[...] 

La capturePhotoWithData fonction est appelée correctement, mais la fonction va dans la branche de capture et l'alerte indique « ne peut pas lire propetry « GetPicture » undefined »

je crée le modèle et la solution que je construis la. J'essaie ceci sur mon appareil Android. J'ai lu beaucoup de forum et d'autres questions sur le web, mais rien n'a encore fonctionné pour moi.

Voyez-vous des erreurs ou quelque chose qui manque ici?

Répondre

0

Cela signifie que navigator.camera n'est pas défini pour que votre projet ne voit pas cordova-plugin-camera.

La question la plus commune peut être: vous appelez avant appareil est prêt. Assurez-vous que vous appelez la caméra dans deviceready:

document.addEventListener("deviceready", function(){ 
    console.log(navigator); // here you can check all plugins 
} 

Vous pouvez exécuter: $ cordova plugin list pour être sûr que ce plugin existe aussi dans la liste.

Essayez également de reconstruire: $ cordova build android (ou ios)

+0

Ok, je crains déjà, mais pourquoi il est indéfini? Je deviens fou, j'ai géré d'autres plugins dans d'autres applications (exemple: notification push), mais dans ce cas, je suis coincé. Je ne peux pas exécuter cordova (ou je ne sais pas comment le faire dans le projet DevExtreme). Quoi qu'il en soit, le point bizarre est que je le vois dans le dossier apk plugin mais quand je l'installe, l'application ne nécessite que l'autorisation de stockage de données et non l'autorisation de la caméra. –

+0

Comment l'appeler avant que l'appareil soit prêt? Après le démarrage de l'application, je dois me connecter et aller dans la bonne section, donc, je ne pense pas que ce soit possible ... ou pas? –

+0

@PieroAlberto Je viens de vous donner des outils pour détecter où est un problème. –