0

我正在通过 Javascript 传递一个本地文件来设置一个 img 源,但我无法让它工作。设置路径的javascript是

<img src='" + the_payload.image + "' width='" + (cellWidth()-20) + "' />

我发送的字符串是完整的文件路径:

file:///mnt/sdcard/Android/data/com.newvisioninteractive.android.myapp/files/c87eba4a-5349-4a55-baec-cc573a5f7571-thumb.png

我看到了一篇关于 ContentProviders 和 ParcelFileDescriptors 的帖子,但也无法让它发挥作用。

这适用于在特定日期显示图像的日历视图。当我传入静态图像时它工作正常,而不是本地图像。

另外,我已经设置

    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setJavaScriptEnabled(true);

我需要设置任何其他权限吗?

4

2 回答 2

1

解决方案是扩展 ContentProvider 类并覆盖 openFile(Uri, String) 方法

package com.packagename.provider;
public class MyProvider extends ContentProvider { 
     @Override
     public ParcelFileDescriptor openFile(Uri uri, String mode){
        URI fileURI = URI.create( "file://" + uri.getPath() );
        File file = new File( fileURI );

        ParcelFileDescriptor parcel = null;
        try {
            parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
        } catch (FileNotFoundException e) {
            Log.e( TAG, "Error finding: " + fileURI + "\n" + e.toString() );
        }

        return parcel;
     }
}

然后在您的 AndroidManifest.xml 文件中包含

 <provider
        android:name=".provider.MyProvider"
        android:authorities="com.packagename" />

然后,您可以访问您的文件,这些文件通常是

 file://sdcard/Android/data/com.packagename/image.jpg

通过使用

 content://com.packagename/sdcard/Android/data/com.packagename/image.jpg

所以基本上用 content://com.packagename 替换 file://

于 2012-07-03T19:37:19.967 回答
0

尝试使用 file:///android_assets/image.png 并将图像放在 android 资产中

于 2012-07-03T01:14:39.133 回答