Android与H5数据交互

本文介绍了一个Android应用中WebView与原生代码交互的具体实现方案。包括如何通过JavaScriptInterface类实现JavaScript与Java之间的通信、处理返回键行为、配置WebView加载外部链接的方式及页面加载进度等。

2016-04-26  by  木易哥哥--Edward 


1.android端首先邦定建立的javascriipt对象

mWebH5.addJavascriptInterface(new JavaScriptInterface(this), "android");

2.JavaScriptInterface对象代码
public class JavaScriptInterface {
    private Activity mActivity;
    private int LOGIN_TYPE_COMMON=-1;
    public JavaScriptInterface(Activity activity){
        mActivity=activity;
    }
   @JavascriptInterface
    public void shareWX(String json){
       if(SharedPrefs.getInstance().getUserAccessToken()==null){
           LoginActivity.startActivity(mActivity,LOGIN_TYPE_COMMON);
           Toast.makeText(UIUtils.getContext(), "亲,登陆后才能领取红包福利哟!", Toast.LENGTH_SHORT).show();
           return;
       }
       Gson gson=new Gson();
       final ShareLinkBean shareLinkBean = gson.fromJson(json, ShareLinkBean.class);
       LogUtils.i("test",json);
       mActivity.runOnUiThread(new Runnable() {
           @Override
           public void run() {
               ShareDialog shareDialog = new ShareDialog(mActivity);
               shareDialog.setShareType(ShareDialog.SHARE_FOR_MY);
               shareDialog.show();
               shareDialog.setData(shareLinkBean);
           }
       });

    }
    @JavascriptInterface
    public String setAccessToken(){
        return SharedPrefs.getInstance().getUserAccessToken();
    }
    @JavascriptInterface
    public void payWX(String orderId,String price,String toUrl){
        PayTypeActivity.startActivity(mActivity,orderId,PayTypeActivity.TYPE_SHANGCHENG,toUrl,price);
        mActivity.overridePendingTransition(R.anim.enter_down_to_up, 0);
     //   Toast.makeText(UIUtils.getContext(), orderId+" "+price+" "+toUrl, Toast.LENGTH_SHORT).show();
        LogUtils.i("test", orderId + " " + price + " " + toUrl);

    }
}

3.返回键交互

//改写物理按键——返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (mWebH5.canGoBack()) {
            mWebH5.goBack();//返回上一页面
            return true;
        } else {
            finish();
        }
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public void finish() {
    if (mWebH5.canGoBack()) {
        mWebH5.goBack();//返回上一页面
        return;
    }
    super.finish();
}

4.浏览器配置交互

mWebH5.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
        view.loadUrl(url);
        return true;
    }
});

mWebH5.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        if(newProgress == 100){
            mPbLoad.setVisibility(View.INVISIBLE);
        }else{
            mPbLoad.setProgress(newProgress);
            if(mPbLoad.getVisibility() == View.INVISIBLE){
                mPbLoad.setVisibility(View.VISIBLE);
            }
        }
        super.onProgressChanged(view, newProgress);
    }
});


5.H5页面关联设置

<button type="button" id="btn-android" class="send-coupon" onclick="shareAndroid();" style="display: block;">分享好友领红包</button>

function shareAndroid(){
window.android.shareWX(shareValue);
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值