2012-07-03 57 views
0

我通過Javascript傳遞本地文件來設置img源,但無法使其工作。 設置路徑的JavaScript是Android - 在WebView中將本地圖像設置爲img元素

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

我是否需要設置任何其他權限?

回答

0

嘗試使用的文件:在機器人資產

+0

他們是從Web服務下載並保存到文件因此,SDcard是動態創建的,而不是放置在資產文件夾中,以 – SPillai

+0

開頭,您是否使用lazyloader下載文件? – SquiresSquire

1

的解決方案是在延伸ContentProvider類和重寫中openFile(URI,字符串)///android_assets/image.png和放置圖像的方法

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 

所以基本上替換文件://與內容://com.packagename

相關問題