繁体   English   中英

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

[英]Cordova 3.4.0: Camera.getPicture() returns encoded URI when selected from GALLERY

我正在使用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);} );

       }

我能够使用此插件从“content://”URI转换为“file://”URI: https//www.npmjs.com/package/cordova-plugin-filepath

获得“file://”URI后,我就可以使用Cordova的resolveLocalFileSystemURL()函数了。

希望这可以帮助。

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

在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问题记录了此问题的潜在解决方法。 请参阅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 
                  } ); 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM