Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cordova 3.4.0: Camera.getPicture () devuelve el URI codificado cuando se selecciona de GALLERY

Estoy usando Camera.getPicture () API para capturar la imagen o seleccionar la imagen de GALLERY. Cuando tomo la imagen usando la cámara, me devuelve FileEntry que tiene URL correcta con nombre de archivo y extensión. Pero cuando selecciono un archivo de la Galería, devuelve "FileEntry.fullPath" como /com.android.providers.media.documents/document/image%3A322 ya veces / media / external / images / media / 319

Lo que quiero es, quiero verificar el tipo de archivo compatible (que es jpg / jpeg) y el nombre de archivo real.

¿Hay una manera de obtener el nombre de archivo con la extensión, que está seleccionado.

Gracias por adelantado.

Fragmento de código:

var data = {}; if( type === CAMERA){ data = { quality: quality, destinationType: FILE_URI, encodingType: JPEG, targetWidth: 1200, targetHeight: 1200, saveToPhotoAlbum: true }; } else { data = { destinationType: FILE_URI, sourceType: PHOTOLIBRARY, mediaType: ALLMEDIA }; } navigator.camera.getPicture( successCallback, errorCallback, data ); //The success callback method is : successCallback: function(imageURI, param) { //HERE THE imageURI value is coming with different format if selected from GALLERY window.resolveLocalFileSystemURI(imageURI, function(fileEntry) {fileEntry.file(onSuccess,onError);}, function(evt) {onError.call(this,evt.target.error);} ); } 

2 Solutions collect form web for “Cordova 3.4.0: Camera.getPicture () devuelve el URI codificado cuando se selecciona de GALLERY”

Puedo convertir de un "content: //" URI a un "archivo: //" URI usando este plugin: https://www.npmjs.com/package/cordova-plugin-filepath .

Después de obtener la URI "file: //", puedo usar la función resolveLocalFileSystemURL () de Cordova.

Espero que esto ayude.

 if (fileUri.startsWith("content://")) { //We have a native file path (usually returned when a user gets a file from their Android gallery) //Let's convert to a fileUri that we can consume properly window.FilePath.resolveNativePath(fileUri, function(localFileUri) { window.resolveLocalFileSystemURL("file://" + localFileUri, function(fileEntry) {/*Do Something*/}); }); } 

En phonegap método getpicture navigator.camera.getPicture (cameraSuccess, cameraError, [cameraOptions]);

Podemos darle a cameraOptions

 { quality : 75, destinationType : Camera.DestinationType.DATA_URL, sourceType : Camera.PictureSourceType.CAMERA, allowEdit : true, encodingType: Camera.EncodingType.JPEG, targetWidth: 100, targetHeight: 100, popoverOptions: CameraPopoverOptions, saveToPhotoAlbum: false }; 

Compruebe primero las opciones.

Quirks de Android

Sólo Android 4.4: Android 4.4 introdujo un nuevo Framework de acceso a almacenamiento que facilita a los usuarios examinar y abrir documentos en todos sus proveedores de almacenamiento de documentos preferidos. Cordova aún no ha sido completamente integrado con este nuevo Storage Access Framework. Debido a esto, el método getPicture () no devolverá correctamente las imágenes cuando el usuario selecciona las carpetas "Reciente", "Drive", "Imágenes" o "Almacenamiento externo" cuando el tipo de destino es FILE_URI. Sin embargo, el usuario podrá seleccionar correctamente cualquier imagen si primero pasa por la aplicación "Galería". Las soluciones potenciales para este problema se documentan en esta pregunta de StackOverflow . Consulte CB-5398 para realizar un seguimiento de este problema.

Android utiliza intentos para iniciar la actividad de la cámara en el dispositivo para capturar imágenes y en teléfonos con poca memoria, la actividad de Cordova se puede matar. En este escenario, la imagen no puede aparecer cuando se restaura la actividad Cordova.

Si tienes fileEntry puedes usar el método file () para obtener mettadatas

  function cameraSuccess(urls) { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(){ // alert('success requestFileSystem'); }, function(){ //error }); window.resolveLocalFileSystemURI(urls, function(fileEntry){ fileEntry.file(function(file){ // alert(JSON.stringify(file)); //view full metadata var type = file.type; var nameoffile = file.name; }, function(){ //error }); },function(){ // error } ); 

Una última opción es crear un complemento personalizado para encontrar el tipo de imagen

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.