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
原创粉丝点击