6

ブラウザーでローカルの html ページを開きたいアプリケーションを作成しています。google.com を開くことができます。しかし、ローカルのhtmlファイルを開いているとき。しかし、私は次のエラーが発生しています

リクエスト ファイルが見つかりませんでした。

以下は私のコードです:

try
    {
        Intent i = new Intent(Intent.ACTION_VIEW);
        File f=new File("file:///android_asset/www/trialhtml.html");
        Uri uri = Uri.fromFile(f);
        i.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
        i.setData(uri);
        startActivity(i);
    }
    catch(Exception e)
    {
      System.out.print(e.toString());   

    }
4

5 に答える 5

4

file:///android_asset/www/trialhtml.html は、Web ブラウザーなどの外部アプリケーションには何の意味もありません。アセット内のファイルは、他のアプリケーションからアクセスできません。2 つのオプションがあります。

  1. html ファイルを共有ストレージにコピーして、Web ブラウザーからファイルにアクセスできるようにします。
  2. アプリケーションの新しいアクティビティまたはフラグメント内に WebView を実装してから、 webview.loadUrl("file:///android_asset/www/trialhtml.html");

他の回答が指示しているように、アセットを読む必要はありません。WebView は、画像などの他のアセットのロードを含め、これをすべて舞台裏で処理します。

補足として、Web ブラウザーがファイルを読み取ることができた場合は、使用したくないでしょう。

        i.setClassName("com.android.browser", "com.android.browser.BrowserActivity");

これは、ユーザーのデバイスにインストールされているかどうかに関係なく、特定のブラウザーを明示的に要求しているためです。Chrome のみがインストールされている一部の最新の Android デバイスでは、これは当てはまらないと確信しています。正しい使い方は次のようになります

Uri uri = Uri.parse("http://www.example.com"); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

クラスとパッケージ名を明示的に設定しないことで、どの Web ブラウザーがインストールされていても、ユーザーの既定値が選択されるようになります。

于 2013-02-08T13:17:21.687 に答える
1

生のリソースとして開いてロードし、次のようにWebViewに配置しloadDataます。

InputStream page = getResources()
   .openRawResource(R.raw.my_web_page);
 BufferedReader r = new BufferedReader(new InputStreamReader(page));
String s;
while ((s = r.readLine()) != null)
  builder.append(s);
r.close();
myWebView.loadData(builder.toString(), "text/html", "UTF-8");

アセットを簡単に読み取ることができるのは、独自のアプリケーションだけです。

正確に外部ブラウザでファイルを開く必要がある場合は、取得した文字列を、外部ブラウザからもアクセスできるパブリックな場所に保存します。

于 2013-02-08T13:18:22.487 に答える
0

html 文字列をファイルとして保存するには:

 public File saveStringToHtmlFile(String htmlString) {
        File htmlFile = null;
        try {
            // If the file does not exists, it is created.
            htmlFile = new File((ContextUtils.getAppContext()).getExternalFilesDir(null), "HTML_FILE_NAME.html");
            if (!htmlFile.exists()) {
                htmlFile.createNewFile();
            }

            // Adds a line to the file
            BufferedWriter writer = new BufferedWriter(new FileWriter(htmlFile, false));
            writer.write(htmlString);
            writer.close();
        } catch (IOException e) {
            Log.e(TAG, "Unable to write to HTML_FILE_NAME.html file.");
        }
        return htmlFile;
    }

ブラウザで html ファイルを開くには:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(htmlFile), "text/html");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
于 2015-07-30T13:35:45.240 に答える
0

アセット内のファイルを読み取るには、Android Assetmanager を使用する必要があります

AssetManager am = context.getAssets();
InputStream is = am.open("trialhtml.html");
于 2013-02-08T13:15:32.393 に答える
0

webView を使用してみてください。開くことができます。また、htmlでjavaスクリプトファイルを使用している場合は、追加する必要があります

webView.getSettings().setJavaScriptEnabled(true);

アクティビティに追加し、javascript ファイルを assest/www フォルダーに追加します。

webView = (WebView)findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        webView.loadUrl("file:///android_asset/www/index.html");
于 2013-02-08T14:12:30.307 に答える