WebView与JS交互
来源:互联网 发布:公务员工龄的算法 编辑:程序博客网 时间:2024/06/03 22:41
1.)mainfest.xml中加入网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.)WebView开启支持JavaScript
mWebView.getSettings().setJavaScriptEnabled(true);
3.)添加交互接口
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), “demo”);
**添加接口类** demo是链接js的栈桥public class DemoJavaScriptInterface{ public static final int CAMERA = 0x01; public static final int PHOTO = 0x02; public static final int DOWNLOAD= 0x03; private Context mContext; public MyJavaScript(Context context) { mContext = context; } //无参数方法 /** * 原生拍照 */ @JavascriptInterface public void takePhoto() { Intent intent = new Intent(mContext, CameraActivity.class); intent.putExtra("photo","photo"); ((Activity) mContext).startActivityForResult(intent, CAMERA); } /** * 原生相册 */ @JavascriptInterface public void selectPhoto() { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); ((Activity) mContext).startActivityForResult(intent, PHOTO); } /** * 带参数方法 */ @JavascriptInterface public void downloadApk(String url) { Intent intent = new Intent(mContext, DownLoadActivity.class); intent.putExtra("url",url); ((Activity) mContext).startActivityForResult(intent, DOWNLOAD); }}在mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");之后添加mWebView.loadUrl(网页地址或者本地.html文件);也可以在setWebViewClient()事件中的 @Override public boolean shouldOverrideUrlLoading(WebView webView, String s) { 写webView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); webView.loadUrl(s); 在界面创建一个记录当前页面访问的WebView用于回调 now = webView; }**回调**//这边介绍的都是带参数的回调,无参数的回调就不介绍了@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //相机拍照回调 if (requestCode == CAMERA && CommonUtil.notNull(data)) { 处理相机回来的uri图片地址,一般是选择将图片Base64转码成图片流回调给js **now 记录当前访问的界面 ***注意这里''的拼接可能会回调不到js now.loadUrl("javascript:takePhoto_callback(" + "'" + base + "'" + ")"); //添加回调效果 now.setWebChromeClient(new WebChromeClient()); } //相册照片上传回调 if (requestCode == PHOTO && CommonUtil.notNull(data)) { 处理选取相册回来的uri图片地址,一般是选择将图片Base64转码成图片流回调给js **now 记录当前访问的界面 ***注意这里''的拼接可能会回调不到js now.loadUrl("javascript:selectPhoto_callback(" + "'" + base + "'" + ")"); //添加回调效果 now.setWebChromeClient(new WebChromeClient()); }}<input type="button" value="Camera" onclick="window.demo.optionCamera()"/><input type="button" value="Photo" onclick="window.demo.optionPhoto()"/>//调起拍照 **注意添加demo.这相当于跟webview交互的栈桥function optionCamera(){ javascript:demo.takePhoto();}//调起相册function optionPhoto(){ javascript:demo.selectPhoto();}//调起下载apkfunction optionDownloadApk(){ javascript:demo.downloadApk(url);}//拍照回调function takePhoto_callback(code){ picBase = "data:image/jpeg;base64,"+code; }//相册回调function selectPhoto_callback(code){ picBase = "data:image/jpeg;base64,"+code;}
下篇继续介绍WebView其他的点
0 0
- webview与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- WebView与JS交互
- webView与js交互
- webView与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- webview与js交互
- WebView与JS交互
- webview与js交互
- Webview 与JS 交互
- webview与js交互
- WebView与Js交互
- Spring中Propagation类的事务属性详解
- 第六届蓝桥杯高职组省赛--自我测试
- 【总结】搜狐基于Spark的新闻和广告推荐
- 数据库事务的四大特性以及事务的隔离级别
- Maven初学小记
- WebView与JS交互
- 用C++抓取网络数据包--嗅探器的设计原理
- 如何启动一个项目
- mysql启动失败
- Android AIDL技术实战项目-音乐播放器(一)
- 控制 Memory 和 CPU 资源的使用
- spring框架怎么选择使用ref和value?
- BuildConfig.class 冲突
- 你不知道的JS读书笔记4—原型与原型链