主要实现webwiew的OnLongClick()方法 ,利用

final HitTestResult htr = getHitTestResult();//获取所点击的内容
判断点击的是不是图片 ,其主要代码是:
@Overridepublic 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 来识别是否是二维码图片了:
  @Override    public void onLongClickCallBack(final String imgUrl) {        imgurl=imgUrl;        // 获取到图片地址后做相应的处理        new Thread(){            public void run() {                decodeImage(imgUrl);                handler.sendEmptyMessage(0);            };        }.start();        showDialog();    }


首先 我们把图片的链接地址 转换成图片:
 /**     * 根据地址获取网络图片     * @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;    }
把链接转出图片了后在识别图片是不是二维码图:
    /**     * 判断是否为二维码     * @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来显示“识别图中二维码”
 @SuppressLint("HandlerLeak")    private Handler handler = new Handler(){        public void handleMessage(Message msg) {            if (msg.what == 0){                if (isQR){                    adapter.add("识别图中二维码");                }                adapter.notifyDataSetChanged();            }        };    };
点击保存图片了的话 使用asnytask线程来保存图片到本地 :
 /***     * 功能:用线程保存图片     *     * @author wangyp     *     */    private class SaveImage extends AsyncTask {        @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[4096];                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();        }    }

如果用户点击 识别二维码 的话 把识别好了的二维码链接打开浏览器:
   
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse(result.toString()));startActivity(intent);closeDialog();
这是demo点击打开链接下载






更多相关文章

  1. android打开相册选取图片或打开相机拍照并进行裁剪
  2. 2016~4.12Android(安卓)之图片处理
  3. android图像绘制(五)——画布保存为图片
  4. Android中的ImageView的一些有用的属性
  5. Android(安卓)OOM ,回收布局文件中ImageView占用的内存.Bitmap O
  6. RadioGroup没有文字只显示图片,图片居中问题
  7. android 下载图片到本地 sdcard
  8. Android(安卓)ZoomControls放大缩小图片
  9. Android实现图片浮动随意拖拽效果

随机推荐

  1. MySQL事务及Spring隔离级别实现原理详解
  2. MySQL explain获取查询指令信息原理及实
  3. IDEA连接mysql又报错!Server returns inva
  4. CentOS7.8安装mysql 8.0.20的教程详解
  5. mysql迁移至8.0时的注意事项(小结)
  6. linux 之centos7搭建mysql5.7.29的详细过
  7. MySQL去重该使用distinct还是group by?
  8. MySQL 事务概念与用法深入详解
  9. MySQL 的启动选项和系统变量实例详解
  10. MySQL 的启动和连接方式实例分析