Android接入WebView(一)——基本用法

Android接入WebView(一)——基本用法

Android接入WebView(二)——与JavaScript交互

Android接入WebView(三)——浏览器书签与历史记录与二维码分享

Android接入WebView(四)——浏览器书签与历史记录详细处理

Android接入WebView(五)——浏览器制作总结及源码分享

最近写了一个基于webview和zxing,sqlite实现的一款浏览器

主要功能有:扫描二维码以及打开本地二维码加载网页,书签和历史记录管理,无痕浏览,分享网址,分享网址二维码,浏览器出错自定义等功能。

源码地址:此资源解压后用Android可直接打开

在Android中,WebView是一种用来呈现网页内容的视图控件。与其他视图一样,它可以占据全屏也可以只占用activity的一部分。

(1)构造WebView

先在布局文件中定义一个WebView控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
 

(2)记得配置AndroidManifest.xml 网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

(3)然后在activity中申明:

WebView webView=(WebView)findViewById(R.id.webview);
webView.loadUrl("https://blog.csdn.net/mountain_hua");

然后运行,发现并未显示网页,检查发现Android monitor里出现了

Denied starting an intent without a user gesture

意思是没有用户的主动手势,不能自动开始一个intent

先说解决方法:

方法一:给webVie设置如下:

webView.setWebViewClient(new WebViewClient());

方法二:或者给用户增加一个手势,比如通过点击Button打开这个网页

我用的方法一,再点击运行后,出现了在下的博客。webview使用成功。

那么为什么会出现

Denied starting an intent without a user gesture        

查询官方文档:

 

  1. From newest androids, the WebView and Chrome Client is separated application which can be automatically updated without user intention.

  2. From Chrome x >= 25 version, they changed how loading url is working in android application which is using webview component. https://developer.chrome.com/multidevice/android/intentsLooks like they are blocking changing url without user gesture and launched from JavaScript timers

 

Solution here is to force user to activate URL change, for example on button click.

Also, you can override method mentioned above "shouldOverrideUrlLoading" in WebView client.

第一条说最新的androids可以不用获得用户的intent,就能自动打开一个webview。

第二条说当Chrome版本大于等于25时,就需要用户的intent了。

解决方法就是我说的那两种:(1)通过Button打开。(2)重写shouldOverrideUrlLoading方法。即:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;                
    }
});

 

前进返回刷新:

package mountain_hua.learn_webview1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView webView=(WebView)findViewById(R.id.webview);
        webView.loadUrl("https://blog.csdn.net/mountain_hua");
        webView.setWebViewClient(new WebViewClient());
        Button b1=(Button)findViewById(R.id.button);
        Button b2=(Button)findViewById(R.id.button2);
        Button b3=(Button)findViewById(R.id.button3);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //返回
                webView.goBack();
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //重新加载
                webView.reload();
            }
        });
        b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //前进
                webView.goForward();
            }
        });


    }
}

 

 

 

附常用方法:(常用方法参考了https://blog.csdn.net/u012322710/article/details/52789818

WebSetting常用方法


setDomStorageEnabled             开启缓存
setAllowFileAccess                  启用或禁用WebView访问文件数据
setBlockNetworkImage          是否显示网络图像
setBuiltInZoomControls         设置是否支持缩放 
setCacheMode                       设置缓冲的模式
setDefaultFontSize                 设置默认的字体大小
setDefaultTextEncodingName 设置在解码时时候用的默认编码
setFixedFontFamily                 设置固定使用的字体
setJavaScriptEnabled                 设置是否支持Javascript
setLayoutAlgorithm                 设置布局方式
setLightTouchEnabled         设置用鼠标激活被选项
setSupportZoom                         设置是否支持变焦



WebViewClient常用方法


doUpdateVisitedHistory 更新历史记录
onFormResubmission 应用程序重新请求网页数据
onLoadResource        加载指定地址提供的资源
onPageFinished                网页加载完毕
onPageStarted                网页开始加载
onReceivedError                报告错误信息
onScaleChanged        当WebView发生改变
shouldOverrideUrlLoading 控制新的连接在当前WebView中打开

与javascript交互见:Android接入WebView(二)——与JavaScript交互

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android Studio中使用WebView实现通讯录,首先需要创建一个新的Android工程,并在布局文件中添加一个WebView组件。然后,需要在代码中加载一个包含通讯录功能的web页面,并启用JavaScript交互。在web页面中,可以使用HTML、CSS和JavaScript来创建通讯录界面,并实现添加、删除、编辑联系人等功能。 在Android Studio中,需要在Activity中配置WebView的设置,如启用JavaScript、设置WebViewClient等。通过WebViewClient可以拦截网页的加载过程,并在Android应用中处理对应的逻辑。同时,可以通过JavaScript与Android应用进行通信,例如通过JavaScript调用Android方法来实现添加联系人、删除联系人等操作。 在Android应用中,还可以通过WebView的接口来调用JavaScript方法,实现与web页面的数据交互。例如,通过WebView的addJavascriptInterface方法,可以将Java对象注入到JavaScript中,从而实现Android应用与WebView之间的双向通信。 最后,需要注意在使用WebView时,要注意安全性问题,防止恶意网页攻击。可以通过设置WebView的安全策略、禁止加载不安全的资源等方式来加强安全性。另外,还可以对JavaScript接口进行限制,只暴露必要的方法,以减少潜在的风险。 总之,通过在Android Studio中使用WebView实现通讯录,可以充分发挥WebView的强大功能,实现一个功能丰富、交互性强的通讯录应用。同时,需要在开发过程中注意安全性和用户体验,确保应用的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值