2

私の問題は、プロジェクト内の 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 画像を使用したので、これは完全に機能しました。

(ただし、すべてのブラウザーがデータ スキームをサポートしているかどうかはわかりません)

4

3 に答える 3

1

Android ブラウザはデータ URI スキームをサポートしています

ウィキペディアの例に従って、次の URL を使用して、テキスト「42」を含む HTML ページを表示できます。

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
于 2013-03-06T11:18:39.430 に答える
0

デフォルトのブラウザをで直接動作させることはできないと思いますContentProviderドキュメントには、必要なメソッドは公開されていません。

于 2013-03-06T11:41:23.000 に答える
0

ケースによっては、別の解決策もあります。プロジェクト アセットをブラウザーに提供するローカル HTTP サーバーを実装します。

このためには、ブラウザがファイルを要求したときにローカル サーバーが実行されていることを確認する必要があります。アプリがインテントをブラウザーに送信するものである場合、これは問題になりません。

また、すでに使用されているポートを開かないように、ポートを動的に選択します。

HTTP サーバー用のこのオープン ソース プロジェクトNanoHTTPDを試してみました。魔法のように機能させるのにそれほど時間はかかりませんでした。

于 2013-03-15T09:45:57.513 に答える