android浏览器打开本地html文件的方法有哪些?

html-css040

android浏览器打开本地html文件的方法有哪些?,第1张

android 浏览器

打开本地html文件的方法

有些html文件放在本地磁盘和sdcard,如何用打开这个网页呢?

这种应用在测试时非常有用。

有2个方法:

1. 使用文件管理器

如ES等,需要幸运的是你的文件管理器直接用浏览器打开。 

2. 在浏览器输入地址

访问本地磁盘和SD卡上的HTML,前部分content://com.android.htmlfileprovider是Provider的标准,后面是程序目录。 

比如sdcard的tesl.html

直接在浏览器里输入content://com.android.htmlfileprovider/sdcard/test.html回车就可以看到网页了。

在代码

webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html")

如果是其它程序的私有html文件,这样做会失败。

这是由于com.android.htmlfileprovider的权限不够,如果是重写一个私有的HtmlProvider位于同一个应用中,应该能解决问题。然后就参考了原来的com.android.htmlfileprovider

源代码,改写了下。问题解决了,使用私有的HTMLProvider,可以轻松的访问手机内存中,程序私有目录下的html文件。

网上有例子,你可以搜索!

html页面(命名:Android.html放在assets文件夹下):::::

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "

<html xmlns="">

<head>

<meta http-equiv="Content-Type" content="text/html charset=utf-8" />

<script language="javascript" type="text/javascript">

function get4Android(str){

 document.getElementById("show").innerHTML="This is a message from android:"+str

 }

</script>

</head>

<body>

  <div id="show"></div>

</body>

</html>

 

Text.java代码:::

import android.app.Activity

import android.os.Bundle

import android.os.Handler

import android.os.Message

import android.text.Editable

import android.view.MotionEvent

import android.view.View

import android.view.View.OnClickListener

import android.view.View.OnTouchListener

import android.webkit.WebSettings

import android.webkit.WebView

import android.webkit.WebViewClient

import android.widget.Button

import android.widget.EditText

import android.widget.TextView

 

public class Text extends Activity implements OnClickListener {

 

    private Button button

    private TextView text

    private WebView web

    private EditText edit

    private Handler handler

 

    private void initView() {

        button = (Button) this.findViewById(R.id.button2)

        web = (WebView) this.findViewById(R.id.webView1)

        edit = (EditText) this.findViewById(R.id.editText1)

        button.setOnClickListener(this)

    }

 

    private void setWebView() {

        web.setWebViewClient(new WebViewClient())

        web.requestFocus()

        WebSettings setting = web.getSettings()

        setting.setJavaScriptEnabled(true)

        web.setOnTouchListener(new OnTouchListener() {

 

            @Override

            public boolean onTouch(View v, MotionEvent event) {

                web.requestFocus()

                return false

            }

        })

        web.addJavascriptInterface(new SendAndroid(), "theKey")

        web.loadUrl("file:///android_asset/android.html")

    }

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.main)

        initView()

        setWebView()

 

        handler = new Handler() {

            public void handleMessage(android.os.Message msg) {

                String str = msg.obj.toString()

                text.setText(str)

            }

        }

    }

 

    @Override

    public void onClick(View v) {

            Editable editable = edit.getText()

            web.loadUrl("javascript:get4Android(\"" + editable.toString()

                    + "\")")

    }

 

    class SendAndroid {

        public void runOnAndroidJavaScript(final String str) {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    System.out.println("******" + str)

                    Message mes = handler.obtainMessage()

                    mes.obj = str

                    handler.sendMessage(mes)

                }

            }).start()

 

        }

    }

}

 

主要是:web.loadUrl("javascript:get4Android(\"" + editable.toString()+ "\")")中的“javascript:get4Android”要和html中的【function get4Android(str){

 document.getElementById("show").innerHTML="This is a message from android:"+str

 }】方法名相同

首先,Android中显示Html内容,有3中方式:(目前我用到的有这3种)

1、可以利用Android原生的Html.fromHtml(str, imageGetter, tagHandler)来进行显示。(不过,我这边用了,即使加了页面加载动画,还是觉得非常慢,有大量图片,会导致OOM;如果图片不多的话,可以考虑)

2、利用第三方插件HtmlTextView。

GitHub地址:https://github.com/PrivacyApps/html-textview

图片加载很顺畅,使用方法也非常简单,不过,有两个注意事项:

(1)其中,HtmlHttpImageGetter有3个构造函数,可以根据自己的情况选择。

(2)加载大量图片的时候,会导致OOM内存溢出。针对于这个情况,HtmlHttpImageGetter有一个压缩图片的方法可以调用,可以进去查看它的公共方法。(不过,我这边显示的图片过大,每张1M左右,并且一下子有几十张,即使设置了压缩图片,还是会导致OOM问题,目前还没解决,有大神知道咋弄的,拜托指点一下,非常感谢!)

对了,这个第三方插件的基本用法,点击上面的连接,进去一看就知道了,很简单。

3、第三种,是我没办法的情况下想的:把html标签里的内容利用正则表达式拿出来,其中,文本内容用一个TextView代替,<img>标签图片用一个ImageView代替,其他相关的标签自行选择替换。说白了,就是创建一个个的TextView以及ImageView填充到布局里(LinearLayout之类的)。要说明的是:其中图片显示用Glide来实现。目前我这边测试的情况还是可以的,加载的速度非常快,也没因内存问题导致APP崩溃。