簡體   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