私の問題は、プロジェクト内の HTML ファイルをブラウザにロードする必要があることです。
アプリケーションの詳細については、次のことはできません。
- ファイルを読み取る必要があるときにアンマウントされる可能性があるため、アセットを SD カードにコピーします。
- アプリケーションでa を使用
WebViewします。ブラウザである必要があります。
これまでの私のアプローチは、ContentProvider. 私はこのチュートリアルに従っています。このアプローチでは、私の主な問題は、ブラウザに を渡し、Urimy への呼び出しを取得する方法ContentProviderです。
次のようにインテントをブラウザに送信しようとしました:
Uri uri = Uri.parse( "content://myprovider_authority/my_file.html" ):
intent.setData(uri);
startActivity(intent);
しかし、標準の Android ブラウザは URI を理解せず、Google で URI を検索しようとします。
Uriこれをブラウザに渡す方法を知っている人はいContentProviderますか?
解決策の説明:
@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. 2 つのオプションがある場合は、それらの画像をエンコードし、実際のエンコーディングをエンコーディング内に配置HTMLするか、Web 画像を参照します (したがって、他のエンコーディングを行う必要はありません)。
私のHTMLは非常にシンプルで、Web 画像を使用したので、これは完全に機能しました。
(ただし、すべてのブラウザーがデータ スキームをサポートしているかどうかはわかりません)