Android和H5进行交互的模板代码

Android

1. 构建用于交互的对象

TestObject
public static class TestObject {
    private final WeakReference<Activity> wfActivity;
    public TestObject(Activity ac) {
        this.wfActivity = new WeakReference<>(ac);
    }
    
    //处理html按钮触发事件
    @JavascriptInterface
    public void login(String uid) {
        if (wfActivity.get() != null) {
            
        }
    }
    
    @JavascriptInterface
    public void loginOut() {
    }
}

2. WebView设置WebViewClient

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return super.shouldOverrideUrlLoading(view, request);
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return super.shouldOverrideUrlLoading(view, url);
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }
    @Override
    public void onPageFinished(WebView view, String url) {
    	//把数据传给html
        final UserInfo bean = DataSourceManager.getUserInfoBen();
        if (bean != null) {
            final String token = ACache.get(context).getAsString(Constants.TOKEN);
            mWebView.evaluateJavascript("javascript:getUserInfo('" + bean.user_id + "','" + bean.avatar + "','" + token + "')", new ValueC
                @Override
                public void onReceiveValue(String value) {
                    //Log.e("123", "onReceiveValue getUserInfo : " + value);
                }
            });
        }
        super.onPageFinished(view, url);
    }
    @Override
    public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
        super.doUpdateVisitedHistory(view, url, isReload);
    }
});
mWebView.addJavascriptInterface(new TestObject(mMainActivity), "testObject");
mWebView.loadUrl("https://xxx.net/xxx/xxx");

Html

<html lang="zh-cn">
<head>
    <script>
	//h5接收移动端传过来的用户信息
        function getUserInfo(uid,pwd,avatar){
           return "用户信息:"+ uid+"  "+pwd +" "+avatar;
        }
	//h5接收移动端退出动作
        function exitUser(uid){
           return "退出账号: "+ uid;
        }
    
    </script>
</head>
<body bgcolor="#BCBCBC">
    <p>
        <button type="button" onclick="testObject.login(uid);">h5把用户信息给移动端, 
        	移动端处理对应的 login 方法进行登录
        </button>
    </p>
    <p>
        <button type="button" onclick="testObject.loginOut(uid);">html用户退出操作, 
        	移动端处理 loginOut 方法</button>
    </p>
</body>
</html>
posted @ 2021-01-04 10:18  javakam  阅读(0)  评论(0)    收藏  举报  来源