admin 发表于 2017-10-9 11:18:02

android webview长按识别图片 ,利用zxing识别图片是否是二维码

http://img.blog.csdn.net/20160509211248794?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center主要实现webwiew的OnLongClick()方法 ,利用final HitTestResult htr = getHitTestResult();//获取所点击的内容判断点击的是不是图片 ,其主要代码是: view plain copy



[*]@Override
[*]    public boolean onLongClick(View v) {
[*]      // 长按事件监听(注意:需要实现LongClickCallBack接口并传入对象)
[*]      final HitTestResult htr = getHitTestResult();//获取所点击的内容
[*]      if (htr.getType() == HitTestResult.IMAGE_TYPE
[*]                || htr.getType() == HitTestResult.IMAGE_ANCHOR_TYPE
[*]                || htr.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
[*]            //判断被点击的类型为图片
[*]            if (mCallBack!=null) {
[*]                mCallBack.onLongClickCallBack(htr.getExtra());
[*]            }
[*]      }
[*]      return false;
[*]    }

如果判断是为图片后就可以利用zxing 来识别是否是二维码图片了: view plain copy



[*]@Override
[*]public void onLongClickCallBack(final String imgUrl) {
[*]      imgurl=imgUrl;
[*]      // 获取到图片地址后做相应的处理
[*]      new Thread(){
[*]          public void run() {
[*]            decodeImage(imgUrl);
[*]            handler.sendEmptyMessage(0);
[*]          };
[*]      }.start();
[*]
[*]      showDialog();
[*]}



首先 我们把图片的链接地址 转换成图片: view plain copy



[*]/**
[*]    * 根据地址获取网络图片
[*]    * @param sUrl 图片地址
[*]    * @return
[*]    * @throws IOException
[*]    */
[*]   public static Bitmap getBitmap(String sUrl){
[*]       try {
[*]         URL url = new URL(sUrl);
[*]         HttpURLConnection conn = (HttpURLConnection)url.openConnection();
[*]         conn.setConnectTimeout(5000);
[*]         conn.setRequestMethod("GET");
[*]         if(conn.getResponseCode() == 200){
[*]               InputStream inputStream = conn.getInputStream();
[*]               Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
[*]               return bitmap;
[*]         }
[*]       } catch (Exception e) {
[*]         e.printStackTrace();
[*]       }
[*]       return null;
[*]   }

把链接转出图片了后在识别图片是不是二维码图: view plain copy



[*]/**
[*] * 判断是否为二维码
[*] * @param sUrl 图片地址
[*] * @return
[*] */
[*]private boolean decodeImage(String sUrl){
[*]    result = DecodeImage.handleQRCodeFormBitmap(getBitmap(sUrl));
[*]    if(result == null){
[*]      isQR = false;
[*]    }else {
[*]      isQR = true;
[*]    }
[*]    return isQR;
[*]}


如果是二维码图片的画 发送handle 来更新adapter来显示“识别图中二维码” view plain copy



[*]@SuppressLint("HandlerLeak")
[*]   private Handler handler = new Handler(){
[*]       public void handleMessage(Message msg) {
[*]         if (msg.what == 0){
[*]               if (isQR){
[*]                   adapter.add("识别图中二维码");
[*]               }
[*]               adapter.notifyDataSetChanged();
[*]         }
[*]       };
[*]   };

点击保存图片了的话 使用asnytask线程来保存图片到本地 : view plain copy



[*]/***
[*]    * 功能:用线程保存图片
[*]    *
[*]    * @author wangyp
[*]    *
[*]    */
[*]   private class SaveImage extends AsyncTask<String, Void, String> {
[*]       @Override
[*]       protected String doInBackground(String... params) {
[*]         String result = "";
[*]         try {
[*]               String sdcard;
[*]               if (FileUtils.SDisExists()){
[*]                   sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
[*]               }else{
[*]                   sdcard=getFilesDir().getAbsolutePath();
[*]               }
[*]
[*]               File file = new File(sdcard + "/Download");
[*]               if (!file.exists()) {
[*]                   file.mkdirs();
[*]               }
[*]               file = new File(sdcard + "/Download/" + new Date().getTime() + ".jpg");
[*]               InputStream inputStream = null;
[*]               URL url = new URL(imgurl);
[*]               HttpURLConnection conn = (HttpURLConnection) url.openConnection();
[*]               conn.setRequestMethod("GET");
[*]               conn.setConnectTimeout(20000);
[*]               if (conn.getResponseCode() == 200) {
[*]                   inputStream = conn.getInputStream();
[*]               }
[*]               byte[] buffer = new byte;
[*]               int len = 0;
[*]               FileOutputStream outStream = new FileOutputStream(file);
[*]               while ((len = inputStream.read(buffer)) != -1) {
[*]                   outStream.write(buffer, 0, len);
[*]               }
[*]               outStream.close();
[*]               result = "图片已保存至:" + file.getAbsolutePath();
[*]         } catch (Exception e) {
[*]               result = "保存失败!" + e.getLocalizedMessage();
[*]         }
[*]         return result;
[*]       }
[*]
[*]       @Override
[*]       protected void onPostExecute(String result) {
[*]          Toast.makeText(H5Activity.this,result,Toast.LENGTH_SHORT).show();
[*]       }
[*]   }


如果用户点击 识别二维码 的话 把识别好了的二维码链接打开浏览器: view plain copy



[*]Intent intent = new Intent(Intent.ACTION_VIEW);
[*]intent.setData(Uri.parse(result.toString()));
[*]startActivity(intent);
[*]closeDialog();

这是demo点击打开链接下载



页: [1]
查看完整版本: android webview长按识别图片 ,利用zxing识别图片是否是二维码