Je construis une application qui permet à l'utilisateur de prendre des photos. J'utilise Cordova - JS/CSS/HTML - pour écrire le script. Le plugin Cordova pour appareil photo fonctionne parfaitement sur mon émulateur Android dans Android Studio, mais je n'arrive pas à le faire fonctionner sur mon appareil. Voici ce avec quoi je travaille :
Téléphone IRL : Samsung Galaxy S9+
Version de Cordova : 10.0.0
Version du plugin caméra Cordova : 5.0.1
PhoneGap cli-6.5.0 (iOS 4.3.1 / Android 6.1.2 / Windows 4.4.3)
Je ne sais pas si cela a quelque chose à voir avec une incohérence dans la construction (j'ai entendu dire que les versions de Cordova peuvent avoir un effet sur les plugins dans certains environnements) ou si mon code n'est tout simplement pas adapté à un véritable appareil Android.
Voici le code du plugin :
let app = {
init: function(){
document.getElementById('btn').addEventListener('click', app.takephoto);
},
takephoto: function(){
let opts = {
quality: 80,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.CAMERA,
mediaType: Camera.MediaType.PICTURE,
encodingType: Camera.EncodingType.JPEG,
cameraDirection: Camera.Direction.BACK,
targetWidth: 300,
targetHeight: 400
};
navigator.camera.getPicture(app.ftw, app.wtf, opts);
},
ftw: function(imgURI){
document.getElementById('msg').textContent = imgURI;
document.getElementById('photo').src = imgURI;
},
wtf: function(msg){
document.getElementById('msg').textContent = msg;
}
};
document.addEventListener('deviceready', app.init);
Voici le HTML qui exécute le script sur la page de l'application à partir du fichier camera.js dans un dossier séparé :
<div class="page">
<p class="code"><img src="img/logo.png" alt="image" id="photo" /></p>
<p class="node"><button id="btn">Take Picture</button></p>
<p id="msg"></p>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script src="js/camera.js"></script>
Et voici les informations dans ma balise de tête :
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval';
style-src 'self' 'unsafe-inline';
media-src *;
script-src 'self' 'unsafe-inline';
img-src 'self' data: content:;">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>4-Point Inspection</title>
Peut-être que cela a quelque chose à voir avec le XML ou les fichiers de construction ? C'est ma première application Cordova, je suis donc un peu novice en la matière. Une idée de la raison pour laquelle elle fonctionne sur l'émulateur et pas sur mon Galaxy S9+ ?
EDIT : J'ai pris les devants et ajouté mon config.xml (trouvé dans \platforms\android\app\src\main\res\xml ) :
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.hello" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="Camera">
<param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
</feature>
<feature name="Whitelist">
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
<param name="onload" value="true" />
</feature>
<name>HelloWorld</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-intent href="market:*" />
<preference name="loglevel" value="DEBUG" />
</widget>
Et voici l'AndroidManifest (trouvé dans \platforms\android\app\src\main ) :
<?xml version='1.0' encoding='utf-8'?>