Android之WebView

Android之WebView

1. WebVIew的功能

1.显示一个网页
2.混合开发,于JavaScipt交互

2.WebView的使用前提

因为在Android程序中打开网页肯定是需要网的嘛,所以一定不能忘了添加网络权限

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

3.WebVIew的使用

3.1打开一个网页

我们以打开百度为例

  WebView webView = findViewById(R.id.web_view);
        //让webView支持JavaScript脚本
        webView.getSettings().setJavaScriptEnabled(true);
        //这行可加可不加,加上的话,在当前的网页打开二级网页时,还是显示在WebView上,
        //如果不加的话,则会在浏览器上去显示新的页面。
        webView.setWebViewClient(new WebViewClient());
        //根据URl去加载页面
        webView.loadUrl("https://www.baidu.com");
3.2 WebView和JavaScript的交互
3.2.1 Android调用JavaScip
 webView.loadUrl("file:///android_asset/tian1.html");

        Button button = findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "调用了JavaScript的方法", Toast.LENGTH_SHORT).show();
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                    	//在调用JavaScript中的方法时需要提前给WebVIew传入网页的url,这样它才能知道调用的哪一个		JavaScript的方法
                        webView.loadUrl("javascript:XY.show ('iasdasd')");
                    }
                });
            }
        });
 }

javascript:XY.show(‘iadasd’) 这个是JavaScript的伪协议,意思是我调用了该HTML页面的Window对象下的XY对象的show方法

关于这个伪协议中的的show方法的参数 ‘"+info+"’ 和 'info’的区别
第一个info代指一个叫做info的变量,第二个Info代指一个info字符串

3.2.2 JavaScip调用Android
 webView.addJavascriptInterface(new JSHook(), "hello");

这个JSHook对象中包含着要交给js方法,注意要交给js的方法一定要加 @JavascriptInterface注解,否则会在Android 4.4以上的版本抛异常。

注意:因为交给js的方法的执行线程和Android的主线程不是一个线程,所以如果你想在js调用的方法中改变安卓活动的页面,必须要使用 MainActivity.this.runOnUiThread在主线程进行。

    class JSHook {
        @JavascriptInterface
        public void javaMethod(String p) {
            Log.d("tag", "JSHook.JavaMethod() called! + " + p);
        }

        @JavascriptInterface
        public void showAndroid() {
            final String info = "来自手机内的内容!!!";
            MainActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    webView.loadUrl("javascript:show('" +info+ "')");
                }
            });
        }

        public String getInfo() {
            return "获取手机内的信息!!";
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值