2013-03-06 102 views
2

我的問題是我需要將我項目中的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很簡單,我使用網絡圖像,所以這完全爲我工作。

(不知道是否所有的瀏覽器支持,雖然數據計劃)

回答

1

Android的瀏覽器支持data URI scheme

繼維基百科例如,可以使用以下網址與文本顯示一個HTML頁面「42 「:

data:text/html;charset=utf-8,%3C!DOCTYPE%20html%3E%3Chtml%20lang%3D%22en%22%3E%3Chead%3E%3Ctitle%3EEmbedded%20Window%3C%2Ftitle%3E%3C%2Fhead%3E%3Cbody%3E%3Ch1%3E42%3C%2Fh1%3E%3C%2Fbody%3E%3C%2Fhtml%3E 
0

我認爲你不能與你的ContentProvider直接有默認的瀏覽器。 documentation不公開任何你想要的方法。

0

甚至還有另一種解決方案可能取決於案件的工作。實施向瀏覽器提供項目資產的本地HTTP服務器。

爲此,您需要確保您的本地服務器在瀏覽器請求文件時正在運行。如果你的應用程序是向瀏覽器發送意圖的應用程序,這應該不成問題。

還要動態選擇一個端口以避免打開一個已經在使用的端口。

我試着用這個開源項目NanoHTTPD爲HTTP服務器。不需要太長時間就能讓它像魅力一樣運作。

相關問題