我的問題是我需要將我項目中的HTML文件加載到瀏覽器中。將本地資源加載到瀏覽器中(而不是WebView)
對於應用程序的細節,我不能:
- 複製資產的SD卡,因爲當文件需要讀它可以被卸載。
- 在應用程序中使用
WebView
。它需要成爲瀏覽器。
我到目前爲止的做法是一直試圖使用ContentProvider
。我一直在關注這個tutorial。在這種方法中,我的主要問題是如何傳遞給瀏覽器Uri
並接到我的ContentProvider
的呼叫。
我試圖一個Intent發送到瀏覽器這樣的:
Uri uri = Uri.parse("content://myprovider_authority/my_file.html"):
intent.setData(uri);
startActivity(intent);
但股價Android瀏覽器不理解的URI,並嘗試搜索的URI在谷歌。
有誰知道我應該如何通過這Uri
到瀏覽器,所以我收到我的ContentProvider
請求?
SOLUTION解釋說:
@gimix解決方案爲我即使方法是不使用ContentProvider
。我更多地解釋一下。
他建議將數據URI
方案發送到瀏覽器。這意味着將我們的本地HTML
資產文件編碼爲Base64
並使用Intent
傳遞它。瀏覽器將解釋該數據並呈現結果。一些代碼將有助於瞭解它:
String html = "";
try {
InputStream is = mContext.getAssets().open("my_file.html");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
html = new String(buffer);
}
catch (IOException e) {
e.printStackTrace();
}
intent.setData(Uri.parse("data:text/html;charset=utf-8;base64," + Base64.encodeToString(html.getBytes(), Base64.NO_WRAP)));
startActivity(intent);
這裏的棘手的事情是HTML
內的圖像。對於那些有兩種選擇的人來說,對這些圖像進行編碼並將實際編碼置於HTML
編碼中,或者參考Web圖像(因此您不需要執行任何其他編碼)。
我的HTML
很簡單,我使用網絡圖像,所以這完全爲我工作。
(不知道是否所有的瀏覽器支持,雖然數據計劃)