Android H5交互

Android 端

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import butterknife.BindView;
import butterknife.OnClick;

public class WheelActivity extends Activity {
    protected void initViews(Bundle savedInstanceState) {
        WebSettings webSettings = webview.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
        webSettings.setJavaScriptEnabled(true);
        webview.addJavascriptInterface(new AndroidtoJs(),"h5toapp");//AndroidtoJS类对象映射到js的h5toapp对象     

//支持插件
        //webSettings.setPluginsEnabled(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.setAppCacheEnabled(true);
        //开启 DOM 存储功能
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
        //不使用缓存:
        // webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webview.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                String temp = null;
            }

            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                Log.i(TAG, "onJsAlert: ");
                return super.onJsAlert(view, url, message, result);
            }

            @Override
            public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
                Log.i(TAG, "onJsConfirm: ");
                return super.onJsConfirm(view, url, message, result);
            }

            @Override
            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
                Log.i(TAG, "onJsPrompt: ");
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }
            
        });
        webview.loadUrl(url);
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.i(TAG, "shouldOverrideUrlLoading:  url:" + url);
                if (url.contains("http")) {
                    view.loadUrl(url);
                    return true;
                }
                return false;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            @Override
            public void onScaleChanged(WebView view, float oldScale, float newScale) {
                super.onScaleChanged(view, oldScale, newScale);
            }
        });
        ivPreVBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
    }
    final class AndroidtoJs extends Object{
        @JavascriptInterface
        public void goToSignIn() {
            startActivity(new Intent(WheelActivity.this, RedActivity.class));
            Log.i(TAG, "goToSignIn: JS调用了Android的goToSignIn方法");
        }
        @JavascriptInterface
        public void goToPay() {
            Log.i(TAG, "goToPay: JS调用了Android的goToPay方法");
            getPayMode();
        }
    }

}

最关键的部分,webview.addJavascriptInterface(new AndroidtoJs(),“h5toapp”);//AndroidtoJS类对象映射到js的h5toapp对象
其中 h5toapp 在 网页的JS中要用到

网页端:

window.h5toapp.goToPay()

test.html

<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.h5toapp.goToSignIn();
    document.getElementById("p").innerHTML=result;
    }

    </script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2.html">点击</a>
<p id="p"></p>
</body>
</html>

https://www.jianshu.com/p/a25907862523
https://www.jianshu.com/p/d3ee5e6f71c1
https://blog.csdn.net/qq_20451879/article/details/79136579
https://www.jianshu.com/p/3f207a8e32cb
https://blog.csdn.net/carson_ho/article/details/64904691
https://blog.csdn.net/m0_37361593/article/details/79346036
https://blog.csdn.net/qq_32320807/article/details/64441493
https://www.jianshu.com/p/345f4d8a5cfa
https://www.jianshu.com/p/b0c847dcea9c iOS与H5的交互(四种)
https://blog.csdn.net/sinat_26279817/article/details/50145827
https://blog.csdn.net/w15321970103/article/details/75635454
https://www.cnblogs.com/shiyou00/p/6874006.html
https://github.com/Carson-Ho/Webview_Cache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值