我試圖從WebView中的HTML頁面內從應用程序的assets文件夾加載/引用圖像。與大多數示例不同,HTML頁面本身不在資產文件夾中,而是通過http從服務器加載。這個問題的背景是一些性能改進,它應該通過直接從設備加載靜態圖像來減少加載時間(以及傳輸的數據量)。我不確定Android是否有一些限制,因爲有可能通過允許從遠程加載的網頁訪問本地文件存儲來利用該應用程序。Android:如何在webview中從遠程加載的html頁面引用資產圖像
我第一次嘗試使用<img src="file:///android_asset/myimage.png">
加載圖像,但是失敗(出於顯而易見的原因)。我的下一個嘗試是使用ContentProvider
類和參考圖像使用<img src="content://com.myapp.assetcontentprovider/myimage.png">
。
public class AssetContentProvider extends ContentProvider
{
private static final String URI_PREFIX = "content://com.myapp.assetcontentprovider";
public static String constructUri(String url) {
Uri uri = Uri.parse(url);
return uri.isAbsolute() ? url : URI_PREFIX + url;
}
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
Log.d("AssetContentProvider", uri.getPath());
try {
return getContext().getAssets().openFd(uri.getPath().substring(1)).getParcelFileDescriptor();
} catch (IOException e) {
Log.d("AssetContentProvider", "IOException for " + uri.getPath());
throw new FileNotFoundException();
}
}
// more methods irrelevant for this post
}
當加載HTML網頁,我可以在調試日誌openFile()
實際上是從的WebView觸發看到,它返回一個有效ParcelFileDescriptor
對象,但還沒有顯示的圖像:這ContentProvider的執行如下。日誌中沒有顯示錯誤消息,告訴我WebView拒絕加載/顯示圖像。任何想法,如果和如何這可以工作?
你是否找到了你最初的問題的答案(爲什麼'file://'scheme ro'content://'一個工作不正確)? – Olegas 2011-02-20 16:27:36