5

我想在 Android 版本 5.1.1 上使用 Nexus 4 手机从 Android 图片库接收共享图片。我正在使用 phonegap 4.2 和 phonegap WebIntent 插件github 链接和 phonegap 文件插件doc 链接

文本和链接可以正常工作,但是当我尝试从 Android 库共享图像时,我得到一个这样的 URI:

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

而不是像 file:///....

我尝试使用 window.resolveLocalFileSystemURL 函数来解析这个 url,它使用 fileEntry 对象返回成功。但是,当我尝试使用它来读取文件时,出现代码 1000 的错误(请参见下面的代码和输出)。

有趣的是,如果通过 img 标签显示这个 url,我可以很好地看到图像。

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

这表明问题可能是 window.resolveLocalFileSystemURL 函数无法处理 content://... 正确键入 uris?

===== 参考资料 ======

这是我正在使用的代码(注意:我尝试使用其他文件功能(例如 copyTo() 到应用程序文件夹,但它给出了相同的错误):

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

}

这是我尝试从图库中共享图像时代码的控制台输出:

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

这是 AndroidManifest.xml 文件中的意图过滤器。注意:共享工作正常,只是无法解析 URL,所以这可能不是问题。

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

2 回答 2

3

我遇到了完全相同的问题,没有使用标准文件插件的直接解决方案。

我尝试了这个插件,但是https://github.com/hiddentao/cordova-plugin-filepath仅适用于 android 内容 uri。

您改为使用此功能,它似乎正在工作。

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

于 2015-06-24T08:24:28.023 回答
1

Cordova 网站上有一个关于此的开放错误。

https://issues.apache.org/jira/browse/CB-7024

于 2015-07-12T06:44:09.400 回答