Я использую эмулятор PhoneGap Desktop для тестирования своего приложения, которое просто делает снимок с помощью камеры устройства. Все хорошо работает в приложении PhoneGap на Android и iOS. Я получаю запросы, прежде чем сделать снимок, с просьбой разрешить PhoneGap доступ к камере. Тогда все будущие запросы камеры будут работать нормально. Как я и ожидал.
Однако, когда я создаю собственные приложения и запускаю их на устройствах iOS / Android, они больше не запрашивают у меня разрешение на использование камеры, а в iOS происходит сбой, когда я пытаюсь открыть камеру. На Android он просто ничего не делает, когда я включаю камеру.
Я изо всех сил пытаюсь понять, почему он работает с использованием приложения PhoneGap, но не работает, когда я запускаю его как собственное приложение? Я что-то упускаю?
Я создаю структуру приложения, добавляю платформы / плагины и т. Д. С помощью Cordova CLI на моем сервере Ubuntu. Я использую серверы сборки Adobe PhoneGap (v7.0.1) для компиляции собственных приложений. Я использовал только рабочий стол PhoneGap для проверки этой проблемы.
Версия ОС устройства iOS = v11.0.3 Версия ОС устройства Android = 7.0
My config.xml file:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.mycameraapp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>My Camera App</name>
<description>
Test App
</description>
<author email="[email protected]" href="http://www.mycameraapp.com">
My Camera App
</author>
<content src="index.html" />
<plugin name="cordova-plugin-whitelist" spec="1" />
<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:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<engine name="ios" spec="~4.5.3" />
<engine name="android" spec="~6.3.0" />
<plugin name="cordova-plugin-camera" spec="^3.0.0">
<variable name="CAMERA_USAGE_DESCRIPTION" value="To take pictures from within the App" />
<variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="To take pictures from within the App" />
</plugin>
</widget>
Код JavaScript, запускающий камеру:
function upload_case_image(mode) {
openCamera(mode);
}
function setOptions(srcType) {
var options = {
// Some common settings are 20, 50, and 100
quality: localStorage.getItem('image_quality'), // Image quality is defined in the database
destinationType: Camera.DestinationType.DATA_URL,
// In this app, dynamically set the picture source, Camera or photo gallery
sourceType: srcType,
encodingType: Camera.EncodingType.JPEG,
mediaType: Camera.MediaType.PICTURE,
allowEdit: false,
correctOrientation: true //Corrects Android orientation quirks
}
return options;
}
function openCamera(mode) {
var srcType = Camera.PictureSourceType.CAMERA;
var options = setOptions(srcType);
navigator.camera.getPicture(function cameraSuccess(imageUri) {
upload_image(mode, imageUri);
}, function cameraError(error) {
console.debug("Unable to obtain picture: " + error, "app");
}, options);
}
Мой index.html находится в обычном месте в www и ссылается на файл corodva.js:
<!-- Cordova -->
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>