阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 3574|回复: 0

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

[复制链接]

4213

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
127203
QQ
发表于 2017-10-9 11:18:02 | 显示全部楼层 |阅读模式
主要实现webwiew的OnLongClick()方法 ,利用
final HitTestResult htr = getHitTestResult();//获取所点击的内容判断点击的是不是图片 ,其主要代码是:[java] 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 来识别是否是二维码图片了:[java] view plain copy


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



首先 我们把图片的链接地址 转换成图片:[java] 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;  
  •    }  

把链接转出图片了后在识别图片是不是二维码图:[java] 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来显示“识别图中二维码”[java] 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线程来保存图片到本地 :[java] 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[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();  
  •        }  
  •    }  


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


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

这是demo点击打开链接下载




捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2025-1-22 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表