2015-06-19 14 views
5

Tôi muốn nhận hình ảnh chia sẻ từ thư viện hình ảnh Android bằng điện thoại Nexus 4 trên Android phiên bản 5.1.1. Tôi đang sử dụng phonegap 4.2 và một plugin PhoneIap WebIntent github link và plugin tệp phonegap doc link.phonegap resolveLocalFileSystemURL không hoạt động đối với uri nội dung trên android

văn bản và liên kết hoạt động tốt nhưng khi tôi cố gắng chia sẻ một hình ảnh từ thư viện Android, tôi nhận được một URI như thế này:

nội dung: //com.google.android.apps.photos.contentprovider/0/1/nội dung% 3A% 2F% 2Fmedia% 2Fexternal% 2Fimages% 2Fmedia% 2F63131/THỰC TẾ

Thay vì một cái gì đó giống như file: /// ....

tôi cố gắng sử dụng window.resolveLocalFileSystemURL chức năng để giải quyết url này mà trả về thành công với một fileEnt đối tượng ry. Tuy nhiên, khi tôi cố gắng sử dụng nó để đọc các tập tin, tôi nhận được một lỗi với mã số 1000 (xem mã dưới đây và đầu ra).

Thật thú vị, nếu hiển thị url này thông qua thẻ img, tôi có thể thấy hình ảnh đẹp.

<img src="" id="test_intent_image"> 
$('#test_intent_image').attr("src",uri); 

Điều này cho thấy sự cố có thể là hàm window.resolveLocalFileSystemURL không thể xử lý nội dung: // ... nhập uris đúng cách?

===== tham khảo thông tin ======

Đây là mã Tôi đang sử dụng (lưu ý: tôi đã cố gắng này với các chức năng tập tin khác như CopyTo() vào một thư mục ứng dụng nhưng nó cung cấp cho các lỗi tương tự):

document.addEventListener("deviceready", shared, false); 
    document.addEventListener("resume", shared, false); 


function shared() { 

window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_STREAM, 
function(data) { 
// data is the value of EXTRA_TEXT 
    if (! data) { 
     return; 
    } 

    window.resolveLocalFileSystemURL(
     data, 
     function (entry) { 
      console.log('file entry: ' + JSON.stringify(entry, null,3)); 

      function win(file) { 
       var reader = new FileReader(); 
       reader.onloadend = function (evt) { 
        console.log("file read success"); 
        console.log(evt.target.result); 
       }; 

       reader.readAsText(file); 
      }; 

      function fail (error) { 
       console.log("file read error: " + error.code); 
      }; 

      entry.file(win, fail); 

     }, 
     function (error) { 
      console.log('file error: ' + error); 
     }); 

}, function() { 
    // There was no extra supplied. 
    // debug_log("web intent getExtra: no extra"); 
    } 
); 

}

đây là giao diện điều khiển đầu ra của mã khi tôi cố gắng chia sẻ một hình ảnh từ thư viện hình ảnh:

handle share stream :"content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F63087/ACTUAL" 
file entry: { 
    "isFile": true, 
    "isDirectory": false, 
    "name": "ACTUAL", 
    "fullPath": "/com.google.android.apps.photos.contentprovider/0/1/content%3A//media/external/images/media/63087/ACTUAL", 
    "filesystem": "<FileSystem: content>", 
    "nativeURL": "content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F63087/ACTUAL" 
} 
file read error: 1000 

Đây là bộ lọc ý định trong tệp AndroidManifest.xml. Lưu ý: tính năng chia sẻ hoạt động tốt, không thể giải quyết URL nên đây có thể không phải là vấn đề.

<intent-filter> 
<action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="*/*" /> 
     </intent-filter> 

Trả lời

3

Tôi đã gặp sự cố tương tự, không có giải pháp trực tiếp nào bằng plugin tệp chuẩn.

Tôi đã thử plugin này tuy nhiên https://github.com/hiddentao/cordova-plugin-filepath chỉ dành cho nội dung android của uri.

Bạn sử dụng chức năng này thay vào đó và có vẻ như nó đang hoạt động.

window.FilePath.resolveNativePath('content://...', successCallback, errorCallback);

+0

Chỉ cần thử đề xuất của bạn và nó hoạt động tuyệt vời! Cảm ơn bạn rất nhiều! – MicroApper

Các vấn đề liên quan