私の問題は、プロジェクト内の HTML ファイルをブラウザにロードする必要があることです。
アプリケーションの詳細については、次のことはできません。
- ファイルを読み取る必要があるときにアンマウントされる可能性があるため、アセットを SD カードにコピーします。
- アプリケーションでa を使用
WebView
します。ブラウザである必要があります。
これまでの私のアプローチは、ContentProvider
. 私はこのチュートリアルに従っています。このアプローチでは、私の主な問題は、ブラウザに を渡し、Uri
my への呼び出しを取得する方法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 画像を使用したので、これは完全に機能しました。
(ただし、すべてのブラウザーがデータ スキームをサポートしているかどうかはわかりません)