Cordova 3.4.0:从GALLERY中选择时,Camera.getPicture()返回编码的URI

时间:2014-04-02 14:37:04

标签: android cordova

我正在使用Camera.getPicture()API来捕获图像或从GALLERY中选择图像。 当我使用相机拍摄照片时,它会返回FileEntry,其中包含带有文件名和扩展名的正确URL。但是当我从Gallery中选择一个文件时,它会将“FileEntry.fullPath”作为/com.android.providers.media.documents/document/image%3A322返回 有时/ media / external / images / media / 319

我想要的是,我想验证支持的文件类型(即jpg / jpeg)和实际文件名。

是否有办法获取带有扩展名的文件名,该文件名已被选中。

提前致谢。

代码段:

        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);} );

       }

1 个答案:

答案 0 :(得分:3)

在phonegap getpicture方法中     navigator.camera.getPicture(cameraSuccess,cameraError,[cameraOptions]);

我们可以提供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 };

首先检查选项。

Android Quirks

仅限Android 4.4:Android 4.4引入了新的存储访问框架,使用户可以更轻松地浏览和打开所有首选文档存储提供程序中的文档。 Cordova尚未与这种新的存储访问框架完全集成。因此,当destinationType为FILE_URI时,当用户从“Recent”,“Drive”,“Images”或“External Storage”文件夹中进行选择时,getPicture()方法将无法正确返回图片。但是,如果用户首先浏览“图库”应用程序,则可以正确选择任何图片。此StackOverflow question记录了此问题的潜在解决方法。请参阅CB-5398以跟踪此问题。

Android使用意图在设备上启动相机活动以捕获图像,而在内存不足的手机上,Cordova活动可能会被杀死。在这种情况下,Cordova活动恢复时可能不会显示图像。

如果你有fileEntry,你可以使用file()方法来获取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 
                  } ); 

最后一个选项是创建一个用于查找图像类型的自定义插件