Android 开发基于Webview 自制一个简单的手机浏览器

初衷:

虽然现在市场上浏览器很多,比如chrome,夸克,没有广告,新闻等乱七八糟的东西,页面简单清晰,但是自己的浏览记录还是存放在别人的服务器,就算删除了,开隐身模式了,但是具体后台的操作谁又知道呢,鉴于此自己做一个浏览器,实现最基本的搜索,地址加载,响应下载等,实现最基本的功能,没有广告,没有启动页,没有新闻资讯,没有推送,没有后台记录,没有进程保活等烦人的东西。

开始

1. 首先准备一个空白的Android项目(我此处语言采用Kotlin)。

O(∩_∩)O哈哈~  

2. 写布局

非常简单,哈哈





    

    

    

3. 初始化Webview的一些设置


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView()
        initListener()
        loadDefaultUrl()
    }

    private fun initView() {
        webView = findViewById(R.id.webView)
        editText = findViewById(R.id.editText)
        progressBar = findViewById(R.id.progressBar)
        val settings = webView.settings
        settings.javaScriptEnabled = true
        settings.javaScriptCanOpenWindowsAutomatically = true//js和android交互
        settings.allowFileAccess = true // 允许访问文件
        settings.setAppCacheEnabled(true) //设置H5的缓存打开,默认关闭
        settings.useWideViewPort = true//设置webview自适应屏幕大小
        settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS//设置,可能的话使所有列的宽度不超过屏幕宽度
        settings.loadWithOverviewMode = true//设置webview自适应屏幕大小
        settings.domStorageEnabled = true//设置可以使用localStorage
        settings.setSupportZoom(false)//关闭zoom按钮
        settings.builtInZoomControls = false//关闭zoom
    }

    private fun loadDefaultUrl() {
        //访问网页
        webView.loadUrl("http://www.baidu.com")
    }

4. 监听返回键,当webview可以后退的时候,不结束应用


    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        if(event?.keyCode == KeyEvent.KEYCODE_BACK){
            if(webView.canGoBack()) {
                webView.goBack()
                return true;
            }
        }
        return super.onKeyDown(keyCode, event)
    }

5. 监听输入框,加载输入的地址

editText.setOnEditorActionListener { p0, p1, p2 ->
            if(p2?.keyCode == KeyEvent.KEYCODE_ENTER){
                var url = editText.text.toString()
                if(!url.startsWith("http")&&!url.startsWith("https")){
                    url="http://$url"
                }
                webView.loadUrl(url)
                ImTool.closeKeyBoard(baseContext,editText)
            }
            false
        }

6.设置webviewclient,并且监听页面加载进度,当页面加载结束的时候,设置url到输入框

webView.webChromeClient = object : WebChromeClient() {

    override fun onProgressChanged(view: WebView, newProgress: Int) {
        super.onProgressChanged(view, newProgress)
        if(newProgress >= 99){
            progressBar.visibility = View.GONE
        }else if(progressBar.visibility == View.GONE){
            progressBar.visibility = View.VISIBLE
        }
        progressBar.progress = newProgress
    }
}
webView.webViewClient = object:WebViewClient(){
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        editText.setText(url)
    }
}

7.响应页面的下载

        webView.setDownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
            val i = Intent(Intent.ACTION_VIEW)
            i.data = Uri.parse(url)
            startActivity(i)
        }

8. 运行一下试试:

Android 开发基于Webview 自制一个简单的手机浏览器_第1张图片

至此,基本的功能就有了,再也不用担心浏览器泄漏你的浏览记录了,但是也还是防不了百度和其他网站有可能会泄漏你的浏览记录,毕竟这还得靠这些网站自觉了。

最后带上源码链接:

https://github.com/MaXiaopingIT/MinewebBrowser

 

你可能感兴趣的:(Android,Kotlin)