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

1514

被折叠的 条评论
为什么被折叠?



