Android - 在WebView中将本地图像设置为img元素

时间:2012-07-03 00:48:49

标签: android android-webview android-contentprovider

我通过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);

我是否需要设置其他权限?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试使用file:///android_assets/image.png并将图片放入android资源