欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android交互h5 最详细篇

程序员文章站 2022-06-23 14:44:05
这些代码任何h5都可以调用 我踩过坑的这些代码里面都保障了你不再去踩坑 这是调用篇 下一篇2 我去总结如何交互 WebView webView = findViewById(R.id.webView); String a="";//放的网页链接!!! webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient());...

这些代码任何h5都可以调用 我踩过坑的这些代码里面都保障了你不再去踩坑 这是调用篇 下一篇2 我去总结如何交互

	    WebView webView = findViewById(R.id.webView);
        String a="";//放的网页链接!!!

        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(WebViewActivity.this,"android");//h5调用android时候用 1:第一个参数 网页当前上下文 2:给h5调用你的一个名字 可以自己定义 待会儿就有用了
        webView.setVerticalScrollBarEnabled(false); //网页右边的滚动条垂直不显示
        webView.loadUrl(a);//加载h5
        //访问网页
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //使用WebView加载显示url
                view.loadUrl(url);
                Log.i("ziyuan1",""+url);
                //返回true
                return true;
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
                Log.i("ziyuan2",""+url);
                view.loadUrl(url);
            }
        });
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();    //表示等待证书响应
                // handler.cancel();      //表示挂起连接,为默认方式
                // handler.handleMessage(null);    //可做其他处理 s
            }
        });
        //声明WebSettings子类
        WebSettings webSettings = webView.getSettings();
        // 特别注意:5.1以上默认禁止了https和http混用,以下方式是开启
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        String ua = webSettings.getUserAgentString();
        webSettings.setUserAgentString(ua+"");//随便写个英文 推荐就写app的名字 类似于淘宝:taobao。让h5知道是你android来访问的
        //如果访问的页面中要与Javascript交互,则webview必须设置支持 Javascript
        webSettings.setJavaScriptEnabled(true);
        // 若加载的 html 里有JS 在执行动画等操作,会造成资源浪费(CPU、电量)
        // 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可


        //设置自适应屏幕,两者合用
        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

        //缩放操作
        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

        //其他细节操作
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
        //优先使用缓存:
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        //缓存模式如下:
        //LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
        //LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
        //LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
        //LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
        //启动webview的html5的本地存储功能。
        webSettings.setDomStorageEnabled(true);
        webSettings.setAppCacheMaxSize(1024*1024*8);
        String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
        webSettings.setAppCachePath(appCachePath);
        webSettings.setAllowFileAccess(true);
        webSettings.setAppCacheEnabled(true);
        }


//下面的也写一个activity
//按返回键时候
 @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
       // TODO Auto-generated method stub
       if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
           finish();
           return true;
       }
       return super.onKeyDown(keyCode, event);
   }
     //销毁Webview
    @Override
    protected void onDestroy() {
        if (webView != null) {
            webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
            webView.clearHistory();

            ((ViewGroup) webView.getParent()).removeView(webView);
            webView.destroy();
            webView = null;
        }
        super.onDestroy();
    }
  
	//暂停
    @Override
    public void onPause() {
        if (webView != null) {
            webView.pauseTimers();
            webView.onPause();
        }
        super.onPause();
    }
 
 
  

本文地址:https://blog.csdn.net/qq_45312619/article/details/109626492