主要实现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点击打开链接下载
|