eclipse+android+jsbridge 上传图片到网页

时间:2024-04-14 20:09:57

第一步:打开gitup网站:https://github.com/explore

eclipse+android+jsbridge 上传图片到网页

输入:jsbridge,点击lzyzsd/JsBridge

eclipse+android+jsbridge 上传图片到网页

点击download zip:

eclipse+android+jsbridge 上传图片到网页

解压:我们需要的是library文件夹,其他的不需要

eclipse+android+jsbridge 上传图片到网页

打开library文件夹,将com文件夹复制,并粘贴到你的android项目文件夹中的   src文件夹    中:

eclipse+android+jsbridge 上传图片到网页

将WebViewJavascriptBridge.js复制,并粘贴到你的android项目文件夹中的 assets文件夹    中:

eclipse+android+jsbridge 上传图片到网页


第二步:打开eclipse中的该项目中的      com.github.lzyzsd.jsbridge包,

程序会报错,不用紧张,按照提示处理就行,

有一个地方是按照提示处理也解决不了的,你就删除掉这行代码,


第三步:打开activity_main.xml,如图将webview控件换成<com.github.lzyzsd.jsbridge.BridgeWebView     />

eclipse+android+jsbridge 上传图片到网页

第四步:打开MainActivity.java

创建私有对象:private    BridgeWebView    mWebView;

                           private    CallBackFunction     mFunction;

还有静态网页地址:private String webUrl = "file:///android_asset/test.html";

还有静态常量:private static final int NONE = 0;

                            private static final int REQUEST_ALBUM =1; // 相册 

                            private static final String IMAGE_TYPE = "image/*";//文件类型

创建两个类,他们分别继承了BridgeWebViewClient和DefaultHandler,如下:

//继承
class MyWebViewClient extends BridgeWebViewClient {


        public MyWebViewClient(BridgeWebView webView) {
            super(webView);
        }
    }


//继承

class MyHandlerCallback extends DefaultHandler {
        @Override
        public void handler(String data, CallBackFunction function) {
            super.handler(data, function);
            if (null != function) {
                showToast(data);
                function.onCallBack("收到JS消息回复!");
            }
        }
    }

初始化mWebView,如下:

private void initWebView(){
mWebView=(BridgeWebView)findViewById(R.id.webView);
mWebView.setWebViewClient(new MyWebViewClient(mWebView));
               mWebView.setDefaultHandler(new MyHandlerCallback());

               mWebView.setWebChromeClient(new WebChromeClient());
               //加载服务器网页或者本地网页
               mWebView.loadUrl(webUrl);
              JSListner();
}

在oncreate函数中写入: initWebView();

我自己在oncreate函数外面写的JSListner()方法,作用是是监听和接收(从网页端发来的)信息,

其中的

mWebView.registerHandler("(标记名称"submitFromJs",与网页中的window.WebViewJavascriptBridge.callHandler方法中的标记名称必须相同")“     ,     

(你可以在回调函数BridgeHandler() 里面写处理信息的代码,比如调用相册的代码段));

如下:

public void    JSListner(){
          //data接收数据,CallBackFunction发送信息
          mWebView.registerHandler("submitFromJs", new BridgeHandler() {
                          public void handler(String data, CallBackFunction function) {

                                         /*将回调函数化为全局函数,此处跟网页的自动刷新有关,就是在上传图片完成后的代码处,写上mFunction.onCallBack("刷新啦!");,就可以发送信息给网页,告诉网页自动刷新,即在网页的js代码中写:if(responseData=="刷新啦!"){window.location.reload();}*/
                                         mFunction=function;   

                                        //调用系统相册
                                        CallAndroidAlbum();

     
                                                                   showToast("js传来的值"+data);
            }
        });
}

调用系统相册的CallAndroidAlbum方法,如下:

private void CallAndroidAlbum(){
       // 从相册获取图片
       Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);               
       intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGE_TYPE); 
       startActivityForResult(intent, REQUEST_ALBUM);

}

}




onActivityResult方法

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

      if (resultCode == NONE){
showToast("resultCode == NONE");
return;
     }

    if(requestCode == REQUEST_ALBUM){
                      Uri uri= data.getData();

                     mFunction..onCallBack(uri);//把图片的uri即网络资源唯一标识符,发送给网页

    }

    super.onActivityResult(requestCode, resultCode, data);

}

private void showToast(String string) {
        Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();

 }



第五步:打开静态网页file:///android_asset/test.html,写入 window.WebViewJavascriptBridge.callHandler方法

如下:

<script>

        function  TestClick(){

                  window.WebViewJavascriptBridge.callHandler(

                                 'submitFromJs'  

                                , {'Data':"发到android端"} ,   //发送到android端的数据,该类型是任意类型

                                 ,function(responseData) {//接收android端发来的信息

                                                 document.getElementById("pic").src = responseData;

                                   }            

                            )

        }

</script>



//显示图片

<p><inputtype="button"value="打开相册"onclick="TestClick();"/></p>

<imgid="pic"src=""width="100%"height="auto"/>




废话不多说,结束了!如果合意的话请关注,谢谢。