2015-06-19 10 views
5

Ich möchte Bild von Android Bildergalerie mit Nexus 4 Telefon auf Android-Version 5.1.1 erhalten. Ich verwende phonegap 4.2 und ein phonegap WebIntent Plugin github link und das phonegap Datei Plugin doc link.phonegap resolveLocalFileSystemURL funktioniert nicht für Inhalt uri auf Android

Text und Links funktioniert gut, aber wenn ich versuchte, ein Bild aus der Android-Galerie zu teilen, erhalte ich eine URI wie folgt aus:

Inhalt: //com.google.android.apps.photos.contentprovider/0/1/content% 3A% 2F% 2Fmedia% 2Fexternal% 2Fimages% 2Fmedia% 2F63131/IST

Statt etwas wie file: /// ....

ich habe versucht, das zu verwenden, window.resolveLocalFileSystemURL Funktion zum Auflösen dieser URL, die erfolgreich mit einem FileEnt zurückgibt ry Objekt. Wenn ich jedoch versuche, die Datei zu lesen, bekomme ich einen Fehler mit Code 1000 (siehe unten Code und Ausgabe).

Interessanterweise, wenn diese URL über ein IMG-Tag angezeigt wird, kann ich das Bild gut sehen.

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

Dies legt nahe, das Problem könnte die window.resolveLocalFileSystemURL Funktion sein, die nicht Inhalt verarbeiten kann: // ... Typ URIs richtig?

===== Referenz Info ======

Hier ist der Code ich benutze (Anmerkung: Ich habe versucht, diese mit anderen Dateifunktionen wie copyTo() zu einem App-Ordner, aber es der gleiche Fehler gibt):

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

}

Hier ist die Konsolenausgabe des Codes als ich versuchte, ein Bild aus der Fotogalerie zu teilen:

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 

Hier ist der Intent-Filter in der Datei AndroidManifest.xml. Hinweis: Die Freigabe funktioniert einwandfrei. Sie kann die URL nicht auflösen. Dies ist wahrscheinlich kein Problem.

Antwort

3

Ich habe genau das gleiche Problem, mit keine direkte Lösung mit dem Standard-Datei-Plugin.

Ich versuchte dieses Plugin jedoch https://github.com/hiddentao/cordova-plugin-filepath, die nur für Android-Inhalte Uri ist.

Sie verwenden stattdessen diese Funktion, und es scheint zu funktionieren.

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

+0

Ich habe einfach Ihren Vorschlag versucht und es funktioniert super! Vielen Dank Kumpel! – MicroApper

Verwandte Themen