{{indexmenu_n>1}}
=====Tipos de Cámaras by XOne=====
\\
XOne entre sus bondades, ha implementado un módulo de cámara, brindando excelentes potencialidades para esta función y para poder habilitarlas se puede hacer a través de varios alternativas que detallamos a continuación:
\\
^ Modos para implementar cámara en las App XOne ^
| [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:camara:start#Prop Type="IMG" + ui.startCamera|Prop Type="IMG" + ui.startCamera]] |
| [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:camara:start#Prop Type="IMG" + ui.startCamera con JSON|Prop Type="IMG" + ui.startCamera con JSON]] |
| [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:camara:start#Prop Type VD|Prop Type VD]] |
| [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:camara:start#Prop Type PH|Prop Type PH]] |
| [[wiki:2.-desarrollo-app:2.5.-controles-by-xone:camara:start#Prop Type PH con atributo|Prop Type PH con atributo]] |
\\
====Prop Type="IMG" + ui.startCamera====
\\
En este caso se define un prop type IMG, mediante el cual se accede a la cámara del dispositivo y esta queda embebida en la propia ventana desde la que es invocada .
\\
**Ejemplo:**
==== Prop Type="IMG" + ui.startCamera con JSON ====
\\
En este caso se define un prop type IMG igual que el ejemplo anterior y lo que cambia es que la llamada a la cámara se hace a través del método ui y un JSON como parámetro.
\\
**Ejemplo:**
function doStartCameraReservaIMG(evento,obj,propbt,propfoto) {
let sDeviceOS = appData.getGlobalMacro("##DEVICE_OS##");
let jsParams;
let ventana;
if (sDeviceOS == "android") {
jsParams = {
width : 800,
height : 600,
onSuccess : function(sNuevaFoto) {
obj[propfoto] = sNuevaFoto;
ventana = ui.getView(obj);
if (ventana) {
//ventana.refresh(propbt);
ventana.refresh();
}
},
onCancelled: function() {
//Nada
}
};
} else {
jsParams = {
width : 800,
height : 600,
quality : 0.6,
onSuccess : function(sNuevaFoto) {
obj[propfoto] = sNuevaFoto;
ventana = ui.getView(obj);
if (ventana) {
//ventana.refresh(propbt);
ventana.refresh();
}
},
onCancelled: function() {
//Nada
}
};
}
ui.startCamera(jsParams);
}
\\
**Cámara con CallBacks**
\\
/*
* Type (opcional), photo/video. Por defecto photo
* Width (opcional)
* Height (opcional)
* UseInternalCamera (opcional), indica si usar la app de fotos del dispositivo
* o la implementación interna de XOne. Por defecto false
*/
function startPhotoCameraWithCallbacks() {
let jsParams = {
type : "photo",
width : 800,
height : 600,
useInternalCamera: false,
onSuccess : function(sPhoto) {
ui.showToast("Todo OK. Foto: " + sPhoto);
},
onCancelled : function() {
ui.showToast("Se ha cancelado la captura de foto.");
}
};
ui.startCamera(jsParams);
}
====Prop Type VD====
Esta es la propia cámara XOne, se define a través de un Prop Type VD. Para este tipo de prop pueden definirse 3 tipos de cámaras al usarse el atributo camera-api="V1|v2|camerax" .
Las funciones que brinda este control Cámara se obtienen haciendo:\\
\\
let control = getControl("MAP_CAMERA"), donde "MAP_CAMERA" es la propiedad de la cámara.\\
\\
__Estas funciones son:__
^ Funciones ^ Descripción ^
| control.takePicture(params) | para hacer foto |
| control.record | para grabar vídeo |
| control.stopRecording | para detener la grabación |
| control.setFlashMode(sFlashMode) | para decirle si el flash está activo, desactivado, automático, etc. |
| control.setCamera("front") | para escoger entre la cámara trasera y la frontal. |
| control.startPreview | para iniciar la visualización de la cámara en tiempo real. |
| control.stopPreview | para tener la visualización de la cámara en tiempo real. |
| control.isCameraOpened | para saber si la visualización está activada (devuelve true p false) |
| control.setAutoFocus | para decir si quieres que se active el auto enfoque o no. |
| control.isAutoFocus | true o false, para saber si está activado el auto enfoque. |
| control.getSupportedAspectRatios | devuelve un arreglo con las relaciones de aspecto permitidas por la cámara. |
| control.getSupportedVideoProfiles | devuelve un arreglo con los perfiles de vídeo permitidos por la cámara. |
| control.getMaxZoom | devuelve el max Zoom permisible por la cámara. |
| control.setZoom(nZoom), | pone el zoom según el parámetro. (Son números que van desde 1 hasta el mayor valor permitido por la cámara). |
| control.setOnCodeScanned, | es para escanear (En este caso tiene un parámetro que es una función de callback, para lo que se quiera hacer con el código escaneado). |
\\
Ejemplo:
\\
function takePicture() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
var params = {
filename : "test.jpg",
saveToGallery: true,
width : 360,
height : 360,
onFinished : function(sFileName) {
if (!sFileName) {
ui.showToast("Error de cámara");
} else {
ui.showToast("Abriendo nueva foto...");
ui.openFile(sFileName);
}
}
};
control.takePicture(params);
}
function record() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
var currentObj = self;
let params = {
quality : self.MAP_CAMERA_QUALITY,
maxDuration : 10000, // Milisegundos
//maxFileSize : 10485760, // Bytes
withMicAudio: true,
onFinished : function(sFileName) {
self.MAP_RECORDING=0;
ui.refresh("MAP_START_RECORDING,MAP_STOP_RECORDING,MAP_START_PREVIEW,MAP_STOP_PREVIEW");
if (!sFileName) {
ui.showToast("Error de cámara");
} else {
ui.showToast("Nuevo vídeo...");
ui.openFile(sFileName);
}
}
};
control.record(params);
self.MAP_RECORDING=1;
ui.refresh("MAP_START_RECORDING,MAP_STOP_RECORDING,MAP_START_PREVIEW,MAP_STOP_PREVIEW");
}
function stopRecording() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
control.stopRecording();
}
function startPreview() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
control.startPreview();
}
function stopPreview() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
control.stopPreview();
}
function isOpened() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
let bOpened = control.isCameraOpened();
ui.showToast("Abierta: " + bOpened);
}
function isAutoFocus() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
let bAutoFocus = control.isAutoFocus();
ui.showToast("Autofoco: " + bAutoFocus);
}
function getSupportedAspectRatios() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
let allAspectRatios = control.getSupportedAspectRatios();
let sMessage = "Relaciones de aspecto soportadas: ";
for (let i = 0;i < allAspectRatios.length;i++) {
sMessage = sMessage + "\n" + allAspectRatios[i];
}
ui.msgBox(sMessage, "Mensaje", 0);
}
function doSetOnCodeScanned() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
control.setOnCodeScanned(function(evento) {
let nResult = ui.msgBox("Valor: " + evento.data + "\nTipo: " + evento.type, "¿Código OK?", 4);
if (nResult == 6) {
return true;
} else {
return false;
}
});
}
/**
* Modifica el comportamiento de flash de la cámara.
*
* Valores posibles:
* 1) on: Siempre encendido al tomar una foto
* 2) off: Siempre apagado al tomar una foto
* 3) torch: Siempre encendido
* 4) auto: Encendido o apagado al tomar una foto dependiendo de lo que diga el
* sensor de luz
* 5) red_eye: Encendido o apagado al tomar una foto dependiendo de lo que diga
* el sensor de luz, en un modo especial que reduce los ojos rojos
*/
function doSetFlashMode(sFlashMode) {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
control.setFlashMode(sFlashMode);
}
function doToggleFlashMode() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
let sFlashMode = control.getFlashMode();
if (sFlashMode == "on") {
control.setFlashMode("off");
self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-off.png");
} else if (sFlashMode == "off") {
control.setFlashMode("auto");
self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-auto.png");
} else if (sFlashMode == "auto") {
control.setFlashMode("torch");
self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-torch.png");
} else if (sFlashMode == "torch") {
control.setFlashMode("on");
self.setFieldPropertyValue("MAP_TOGGLE_FLASH_MODE", "img", "flash-on.png");
}
ui.refresh("MAP_TOGGLE_FLASH_MODE");
}
function doToggleCamera() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
let sCamera = control.getCamera();
if (sCamera == "front") {
control.setCamera("back");
} else if (sCamera == "back") {
control.setCamera("front");
}
}
function doToggleAutoFocus() {
let control = getControl("MAP_CAMERA");
if (!control) {
return;
}
control.setAutoFocus(!control.isAutoFocus());
}
function getControl(sPropName) {
let window = ui.getView(self);
if (!window) {
return null;
}
let control = window[sPropName];
if (!control) {
return null;
}
return control;
}
==== Prop Type PH ====
\\
En este caso se habilita un control cámara definiendo a través de un prop type PH, tiene como atributos las imágenes asociadas para lanzar la cámara. Se lanza por defecto la cámara del Sistema Operativo del dispositivo.
\\
**Ejemplo:**
\\
==== Prop Type PH con atributo ====
\\
En este caso es similar al anterior, pero si se define el atributo **use-internal-camera="true"** que permite lanzar la cámara interna del framework. Esta opción es recomendable para usar en dispositivos de bajas prestaciones donde el sistema operativo pudiera cerrar aplicaciones en segundo plano.
\\
**Ejemplo:**