安卓使用webView中的JavaScript代码
2016-03-22 10:40
465 查看
在安卓程序中调用webview是一件很简单的事,但是想要获得webview的代码却是比较麻烦,
首先要进行的一步操作就是
第一步:
第二步:
创建一个类作为借口,然后让html代码调用该接口,使得将数据 传回安卓程序中(注意 @JavascriptInterface必须得有)
第三步:
创建ShareInterface对象同时将该对象以及html代码的要调用的对象名添加到webview当中
第四步:
在html代码中的function函数当中使用
样例代码
首先要进行的一步操作就是
第一步:
WebSettings settings = wvIntroduce.getSettings(); settings.setJavaScriptEnabled(true);//使webview能够支持JavaScript代码
第二步:
创建一个类作为借口,然后让html代码调用该接口,使得将数据 传回安卓程序中(注意 @JavascriptInterface必须得有)
class ShareInterface{ @JavascriptInterface public void shareEvent(String content,String image,String title,String url){ ToolUtils.getInstance(context).popWeChatShareing( LayoutInflater.from(context).inflate(R.layout.poping_layout, null),findViewById(R.id.popStart), content,image,R.drawable.ic_launcher,title,url); } }
第三步:
创建ShareInterface对象同时将该对象以及html代码的要调用的对象名添加到webview当中
ShareInterface shareInterface = new ShareInterface(); wvIntroduce.addJavascriptInterface(shareInterface, "android_callBack");//"android_callBack"为html代码要调用的对象名
第四步:
在html代码中的function函数当中使用
android_callBack.shareEvent(content,image,title,url);方法将值回调给安卓程序
样例代码
package com.daniujuntuan.android.activity.common; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.TextView; import com.daniujuntuan.android.AppCommon; import com.daniujuntuan.android.R; import com.daniujuntuan.android.activity.MainActivity< 14045 span class="hljs-comment">; import com.daniujuntuan.android.activity.anzahlungsgarantie_f.AnzahlungsgarantieFActivity; import com.daniujuntuan.android.activity.help_look.HelpLookActivity; import com.daniujuntuan.android.activity.help_look.HelpLookBelowOrderActivity; import com.daniujuntuan.android.activity.help_look.HelpLookOrderDetailActivity; import com.daniujuntuan.android.activity.user.log_regist.RegisterActivity; import com.daniujuntuan.android.utils.ActivityUtils; import com.daniujuntuan.android.utils.ToolUtils; import com.daniujuntuan.android.wxapi.WechatLoginBindingMobileActivity; public class WebViewShowActivity extends Activity { private WebView wvIntroduce; private TextView tvTitle,tvScreen; private ImageView imgBack; private Context context; private ImageView imgTitleRightImage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_webview_show); context = this; wvIntroduce = (WebView) findViewById(R.id.wvIntroduce); tvScreen = (TextView) findViewById(R.id.tvScreen); tvTitle = (TextView) findViewById(R.id.tvTitle); imgBack = (ImageView) findViewById(R.id.imgBack); imgTitleRightImage = (ImageView) findViewById(R.id.imgTitleRightImage); imgTitleRightImage.setVisibility(View.VISIBLE); tvScreen.setVisibility(View.GONE); imgBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (wvIntroduce.canGoBack()) { wvIntroduce.goBack(); return; } if (AppCommon.ANZAHLUNGSGARANTIEF_INTRODUCE.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { ActivityUtils.jump(context, AnzahlungsgarantieFActivity.class, getIntent().getExtras()); finish(); } else if (AppCommon.ANZAHLUNGSGARANTIEF_RULES.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { ActivityUtils.jump(context, AnzahlungsgarantieFActivity.class, getIntent().getExtras()); finish(); } else if (AppCommon.HELP_LOOK_ORDER_REPORT.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL)) || (AppCommon.HELP_LOOK_ORDER_INTRODUCE.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL)) && AppCommon.HELP_LOOK_ORDER_INTRODUCE_ORDER_DETAIL.equals(getIntent().getExtras().getString(AppCommon.HELP_LOOK_ORDER_INTRODUCE_WHO)))) { ActivityUtils.jump(context, HelpLookOrderDetailActivity.class, getIntent().getExtras()); finish(); } else if (AppCommon.HELP_LOOK_ORDER_INTRODUCE.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL)) && AppCommon.HELP_LOOK_ORDER_INTRODUCE_BELOW_ORDER.equals(getIntent().getExtras().getString(AppCommon.HELP_LOOK_ORDER_INTRODUCE_WHO)) || (AppCommon.HELP_LOOK_BELOW_ORDER_MUST_KNOW.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL)))) { ActivityUtils.jump(context, HelpLookBelowOrderActivity.class); finish(); } else if (AppCommon.HELP_LOOK_INTRODUCE.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { ActivityUtils.jump(context, HelpLookActivity.class); finish(); } else if (AppCommon.REGIST_SERVICE_AGREEMENT_REGIST.equals(getIntent().getExtras().getString(AppCommon.REGIST_SERVICE_AGREEMENT_WHO))) { ActivityUtils.jump(context, RegisterActivity.class, getIntent().getExtras()); finish(); } else if (AppCommon.REGIST_SERVICE_AGREEMENT_BINDING.equals(getIntent().getExtras().getString(AppCommon.REGIST_SERVICE_AGREEMENT_WHO))) { ActivityUtils.jump(context, WechatLoginBindingMobileActivity.class, getIntent().getExtras()); finish(); } else if (AppCommon.PAGE_TYPE_HOME_PAGE_FRAGMENT.equals(getIntent().getExtras().getString(AppCommon.PAGE_TYPE))) { Bundle bundle = new Bundle(); bundle.putString(AppCommon.MAIN_PAGE_TYPE, AppCommon.MAIN_PAGE_HOME_PAGE); ActivityUtils.jump(context, MainActivity.class, bundle); finish(); } } }); tvScreen.setVisibility(View.GONE); String pathUrl=""; Bundle bundle=getIntent().getExtras(); if(bundle!=null) { tvTitle.setText(bundle.getString(AppCommon.WEBVIEW_TITLT)); pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + "?from=app"; if (AppCommon.ANZAHLUNGSGARANTIEF_INTRODUCE.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + "?from=app"; } if (AppCommon.ANZAHLUNGSGARANTIEF_RULES.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + "?from=app"; } if (AppCommon.HELP_LOOK_ORDER_REPORT.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + bundle.getString(AppCommon.HELP_LOOK_ORDER_ORDERID) + "?from=app"; } if (AppCommon.HELP_LOOK_ORDER_INTRODUCE.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + "?from=app"; } if (AppCommon.REGIST_SERVICE_AGREEMENT.equals(getIntent().getExtras().getString(AppCommon.WEBVIEW_URL))) { pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + "?from=app"; } if (AppCommon.PAGE_TYPE_HOME_PAGE_FRAGMENT.equals(getIntent().getExtras().getString(AppCommon.PAGE_TYPE))) { pathUrl = bundle.getString(AppCommon.WEBVIEW_URL) + "?from=app"; } loadingWebView(pathUrl); } } private void loadingWebView(String pathUrl) { ShareInterface shareInterface = new ShareInterface(); WebSettings settings = wvIntroduce.getSettings(); settings.setJavaScriptEnabled(true); wvIntroduce.loadUrl(pathUrl); wvIntroduce.addJavascriptInterface(shareInterface, "android_callBack"); wvIntroduce.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { String urlPath = url + "?from=app"; wvIntroduce.loadUrl(urlPath); return true; } }); } class ShareInterface{ @JavascriptInterface public void shareEvent(String content,String image,String title,String url){ ToolUtils.getInstance(context).popWeChatShareing( LayoutInflater.from(context).inflate(R.layout.poping_layout, null),findViewById(R.id.popStart), content,image,R.drawable.ic_launcher,title,url); // popWeChatShareing(content, image, title, url); } } // //微信分享选择弹出框 // private void popWeChatShareing(String content, final String image,String title,String url) { // View view = LayoutInflater.from(this).inflate(R.layout.poping_layout, null); // final ImageView imgWxFriend = (ImageView) view.findViewById(R.id.imgWxFriend);//分享给朋友 // ImageView imgCircleOfFriends = (ImageView) view.findViewById(R.id.imgCircleOfFriends);//分享的朋友圈 // TextView tvCancle = (TextView) view.findViewById(R.id.tvCancle); // final PopupWindow window=popBackgroundAnim(view); // // // //微信分享 // WXWebpageObject webpage = new WXWebpageObject(); //初始化一个WXWebObject对象 // //分享url // webpage.webpageUrl = url; // final WXMediaMessage msg = new WXMediaMessage(webpage);//用WXTextObject实例化一个WXMediaMessage对象 // //分享的标题 // msg.title=title; // //分享的内容 // msg.description=content; // //分享的图片 // Bitmap thumb = BitmapUtil.drawableToBitmap(getResources().getDrawable(R.drawable.ic_launcher)); // msg.setThumbImage(thumb);//设置默认,防止图片未缓存到时分享 // // // window.showAsDropDown(view); // // tvCancle.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // window.dismiss(); // } // }); // // imgWxFriend.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // // final MyDialog myDialog =MyDialog.createDialog(context); // myDialog.setMessage("请稍后..."); // myDialog.setCancelable(false); // myDialog.show(); // // // Handler handlerBitmap = new Handler() { // @Override // public void handleMessage(Message message) { // super.handleMessage(message); // Bitmap bitmap = (Bitmap) message.obj; // if(bitmap==null){ // shareFriend(msg, window, myDialog); // return; // } // bitmap = PhotoDisposeUtils.compressWeChatImage(bitmap, 10); // msg.setThumbImage(bitmap); // shareFriend(msg, window, myDialog); // } // }; // VolleyImageRequestPacking.getInstance(context).loadingNetImageToBitmap(image, handlerBitmap, 0, 0, 0, Bitmap.Config.RGB_565); // // } // }); // // imgCircleOfFriends.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // // // final MyDialog myDialog =MyDialog.createDialog(context); // myDialog.setMessage("请稍后..."); // myDialog.setCancelable(false); // myDialog.show(); // // Handler handlerBitmap = new Handler() { // @Override // public void handleMessage(Message message) { // super.handleMessage(message); // Bitmap bitmap = (Bitmap) message.obj; // if(bitmap==null){ // shareCircleofFriends(msg, window, myDialog); // return; // } // bitmap = PhotoDisposeUtils.compressWeChatImage(bitmap, 10); // msg.setThumbImage(bitmap); // shareCircleofFriends(msg, window, myDialog); // } // }; // VolleyImageRequestPacking.getInstance(context).loadingNetImageToBitmap(image,handlerBitmap,0,0,0, Bitmap.Config.RGB_565); // //// ImageRequest request=new ImageRequest(photoList.get(0), new Response.Listener<Bitmap>() { //// @Override //// public void onResponse(Bitmap bitmap) { //// if(bitmap==null){ //// shareCircleofFriends(msg, window, myDialog); //// return; //// } //// bitmap = PhotoDisposeUtils.compressWeChatImage(bitmap, 10); //// msg.setThumbImage(bitmap); //// shareCircleofFriends(msg, window, myDialog); //// } //// }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { //// @Override //// public void onErrorResponse(VolleyError volleyError) { //// Bitmap thumb = BitmapUtil.drawableToBitmap(getResources().getDrawable(R.drawable.iconfont_car)); //// msg.setThumbImage(thumb); //// shareCircleofFriends(msg, window, myDialog); //// } //// }); //// MyApplication.getHttpQueue().add(request); // } // }); // // } // // //弹出框背景以及动画 // private PopupWindow popBackgroundAnim(View view) { // // 下面是两种方法得到宽度和高度 getWindow().getDecorView().getWidth() // PopupWindow window = new PopupWindow(view, // WindowManager.LayoutParams.MATCH_PARENT, // WindowManager.LayoutParams.WRAP_CONTENT); // // // 设置popWindow弹出窗体可点击,这句话必须添加,并且是true // window.setFocusable(true); // // // 实例化一个ColorDrawable颜色为半透明 // ColorDrawable dw = new ColorDrawable(0xb0000000); // window.setBackgroundDrawable(dw); // //// // 设置popWindow的显示和消失动画 //// window.setAnimationStyle(R.style.mypopwindow_anim_style); // // 在底部显示 // window.showAtLocation(findViewById(R.id.popStart), Gravity.BOTTOM, 0, 0); // return window; // } // // // 分享到朋友 // private void shareFriend(WXMediaMessage msg,PopupWindow window,MyDialog myDialog){ // boolean sIsWXAppInstalledAndSupported = MyApplication.getApi().isWXAppInstalled() // && MyApplication.getApi().isWXAppSupportAPI(); // if(sIsWXAppInstalledAndSupported) { // SendMessageToWX.Req req = new SendMessageToWX.Req();// 构造一个rep // req.message = msg; // MyApplication.getApi().sendReq(req); // window.dismiss(); // myDialog.dismiss(); // }else { // DialogUtils.showToastShort(context, "您的手机未安装微信!"); // myDialog.dismiss(); // } // } // // private void shareCircleofFriends(WXMediaMessage msg,PopupWindow window,MyDialog myDialog){ // boolean sIsWXAppInstalledAndSupported = MyApplication.getApi().isWXAppInstalled() // && MyApplication.getApi().isWXAppSupportAPI(); // if(sIsWXAppInstalledAndSupported) { // DialogUtils.showToastShort(context, "请稍候..."); // SendMessageToWX.Req req = new SendMessageToWX.Req();// 构造一个rep // req.scene = SendMessageToWX.Req.WXSceneTimeline; // req.transaction = String.valueOf(System.currentTimeMillis());//transaction用来标记唯一标识请求 // req.message = msg; // MyApplication.getApi().sendReq(req); // window.dismiss(); // myDialog.dismiss(); // }else { // DialogUtils.showToastShort(context, "您的手机未安装微信!"); // myDialog.dismiss(); // } // } // @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK&&wvIntroduce.canGoBack()){ wvIntroduce.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { imgBack.performClick(); super.onBackPressed(); } }
相关文章推荐
- iOS有关通讯录操作
- Android WebView页面加载优化
- 几种ios界面间的传值方式
- iOS自定义控件创建原理(持续更新)
- 使用自定义Layout代替ViewHolder
- Android应用中取消标题栏
- iOS开发 - MKNetworkKit的使用 上传下载
- android通过电源管理保持屏幕常亮
- C#/IOS/Android通用加密解密方法
- iOS开发,图片太多占内存太大如何解决
- swift - Designated Initializer & Convenience Initializers
- 对Android中集成支付宝支付流程的总结
- Objective-C之run loop详解
- Android SQlite使用实践Demo
- unity3d 状态存储 PlayerPrefs高级用法
- Android报警告:this handler class should be static...
- Android源码分析:Java的Media Scanner层(阅读笔记)
- Android程序目录结构
- android 中MotionEvent中的getX(),getY()方法与getRawX(),getRawY的区别
- Android程序间的跳转问题