1

私のアプリはHTMLファイルを生成しています。これをユーザーに表示したいのですが、私のコードは次のとおりです-

Uri uri = Uri.parse("file://" + fileName);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(uri, "text/html");
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(browserIntent);

次に、「Complete action using」が表示されますが、FireFox ブラウザーのみがリストされます。Chrome、Opera、Dolphin ブラウザもインストールしています。それらすべてを選択できないのはなぜですか?ありがとうございました。

4

4 に答える 4

5

セレクターを使用して、単一のインテントからすべてを機能させることは可能だと思います。私はこれまでに3つのわずかに異なる意図を見つけました-

    // chrome ??
    Intent intent1 = new Intent(Intent.ACTION_VIEW);        
    intent1.setDataAndType(uri, "multipart/related");

    // default "Internet" browser
    Intent intent2 = new Intent(Intent.ACTION_VIEW, uri);
    intent2.setDataAndType(uri, "text/html");
    intent2.setClassName("com.android.browser", "com.android.browser.BrowserActivity");         

    // any other browser (FireFox/HTML Viewer) ??
    Intent intent3 = new Intent(Intent.ACTION_VIEW);
    intent3.setDataAndType(uri, "text/html");
    intent3.addCategory(Intent.CATEGORY_BROWSABLE);  

ここで提供されているソリューションを使用して、これらすべてのインテントを単一のチューザーに入れることができます - 複数のアクションでインテントを作成する方法

どこに行く必要があるかを示してくれたので、logcatの回答を受け入れたままにしています。ありがとう。

于 2013-07-24T20:39:42.643 に答える
2

ルート化された電話を使用し、Chrome apk を取得し、apktool を使用してマニフェスト内を調べることができます。Chrome は通常 http/https/about/javascript スキームのみをサポートし、次のインテント フィルタではファイル スキームを 1 回だけサポートすることがわかります。

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="multipart/related" android:scheme="file"/>
</intent-filter>

そのため、MIME タイプを変更して、他のブラウザーでも同じ調査を行うことができます。

于 2013-07-23T18:46:29.937 に答える
1

アプリケーションの結果に応じて、本当に必要がない場合はWebView、html ファイルを開くブラウザを選択して、この作業を回避することができます。簡単です。次のコードで web_file_reader.xml を作成できます。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WebActivity" >

    <WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/web_viewer1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

    <Button
        android:id="@+id/but_leave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="leave page" />

</RelativeLayout>

したがって、クラスのonCreateコールバック メソッドで次のようにします。

protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.relatorios_activity);

Button leave = (Button) findViewById(R.id.but_leave);
sair.setOnClickListener(new View.OnClickListener()
{           
    @Override
    public void onClick(View v) 
    {
        finish();
    }
    });

    String fileURL = "file://" + filePath; //it's your file path name string

    WebView webView = (WebView) findViewById(R.id.wev_viewer1);
    webView.setVerticalScrollBarEnabled(true);
    webView.setHorizontalScrollBarEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.loadUrl(fileURL);       
}

メイン アクティビティから次のインテントを開くボタンを設定します。

Intent browserView = new Intent(/*your main activity context*/,WebActivity.class);
startActivity(browserView);

これにより、新しいアクティビティの OS バージョンに応じて、任意のレイアウトおよび/または Java スクリプトの構成で任意の html ファイルが開きます。

于 2013-09-28T21:47:42.420 に答える
1

file://おそらく、これらの他のアプリはスキームをサポートしていません。デバイスにローカル ファイルをロードできるブラウザがあるという保証はありません。

于 2013-07-23T18:43:06.217 に答える