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);

然后它向我显示“使用完成的操作”,但只列出了 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

你可以使用 root 手机,获取 Chrome apk,使用 apktool 查看清单。在那里你会看到 Chrome 通常只支持方案 http/https/about/javascript,并且文件方案在以下意图过滤器中只支持一次:

<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);

这将打开任何具有布局和/或 java 脚本配置的任何 html 文件,具体取决于您在新 Activity 上的操作系统版本。

于 2013-09-28T21:47:42.420 回答
1

那些其他应用程序大概不支持该file://方案。无法保证该设备将具有能够加载本地文件的浏览器。

于 2013-07-23T18:43:06.217 回答