Prechádzať zdrojové kódy

二维码长按识别功能

RaoMeng 9 rokov pred
rodič
commit
40296979f1

+ 1 - 0
WeiChat/src/main/AndroidManifest.xml

@@ -211,6 +211,7 @@
             android:name=".ui.me.BasicInfoEditActivity"
             android:windowSoftInputMode="stateHidden|stateAlwaysHidden" />
         <activity android:name=".CaptureResultActivity"/>
+        <activity android:name=".CommonWebviewActivity"/>
         <!-- Tool Activity -->
         <activity
             android:name=".ui.tool.MultiImagePreviewActivity"

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/CaptureResultActivity.java

@@ -59,7 +59,7 @@ public class CaptureResultActivity extends Activity {
                 Log.d("scanurl",result);
                 if (CommonUtil.isWebsite(result)){
                     mWebView.loadUrl(result);
-                    finish();
+//                    finish();
                 }else {
                     Crouton crouton = Crouton.makeText(CaptureResultActivity.this, "您扫描的二维码不是网址", 0xffff4444, 1500);
                     crouton.show();

+ 35 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/CommonWebviewActivity.java

@@ -0,0 +1,35 @@
+package com.xzjmyk.pm.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+
+/**
+ * Created by RaoMeng on 2016/9/14.
+ */
+public class CommonWebviewActivity extends Activity {
+    private WebView mWebView;
+    private String mUrl;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_common_webview);
+        mWebView = (WebView) findViewById(R.id.webview);
+
+        WebSettings webSettings = mWebView.getSettings();
+        //允许加载JavaScript
+        webSettings.setJavaScriptEnabled(true);
+        //网页自适应屏幕
+        webSettings.setUseWideViewPort(true);
+        webSettings.setLoadWithOverviewMode(true);
+
+        webSettings.setDomStorageEnabled(true);
+
+        Intent intent = getIntent();
+        mUrl = intent.getStringExtra("scan_url");
+
+        mWebView.loadUrl(mUrl);
+    }
+}

+ 29 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java

@@ -5,6 +5,8 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -21,10 +23,11 @@ import android.widget.TextView;
 import com.afollestad.materialdialogs.GravityEnum;
 import com.afollestad.materialdialogs.MaterialDialog;
 import com.lidroid.xutils.view.annotation.ViewInject;
-//import com.tencent.bugly.crashreport.CrashReport;
 import com.uuzuche.lib_zxing.activity.CaptureActivity;
+import com.uuzuche.lib_zxing.activity.CodeUtils;
 import com.xzjmyk.pm.activity.AppConstant;
 import com.xzjmyk.pm.activity.CaptureResultActivity;
+import com.xzjmyk.pm.activity.CommonWebviewActivity;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.broadcast.MsgBroadcast;
@@ -48,6 +51,8 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+//import com.tencent.bugly.crashreport.CrashReport;
+
 public class MeFragment extends EasyFragment implements View.OnClickListener {
 
     private static final int REQUEST_CODE = 11;
@@ -318,10 +323,32 @@ public class MeFragment extends EasyFragment implements View.OnClickListener {
                 ImageView imageView = new ImageView(getActivity());
                 imageView.setImageResource(R.drawable.ic_uu_scan_code);
                 MaterialDialog materialDialog = new MaterialDialog.Builder(getActivity())
-                        .title("UU互联最新版二维码")
+                        .title("UU互联最新版二维码\n长按可识别")
                         .customView(imageView, false)
                         .titleGravity(GravityEnum.CENTER)
                         .show();
+                final Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
+                imageView.setOnLongClickListener(new View.OnLongClickListener() {
+                    @Override
+                    public boolean onLongClick(View v) {
+                        CodeUtils.analyzeBitmap(bitmap, new CodeUtils.AnalyzeCallback() {
+                            @Override
+                            public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
+                                Intent intent = new Intent();
+                                intent.setClass(getActivity(), CommonWebviewActivity.class);
+                                intent.putExtra("scan_url", result);
+                                Log.d("image_url",result);
+                                startActivity(intent);
+                            }
+
+                            @Override
+                            public void onAnalyzeFailed() {
+
+                            }
+                        });
+                        return false;
+                    }
+                });
         }
     }
 

+ 11 - 0
WeiChat/src/main/res/layout/activity_common_webview.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+
+    <WebView
+        android:id="@+id/webview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</RelativeLayout>

+ 46 - 2
lib-zxing/src/main/java/com/uuzuche/lib_zxing/activity/CodeUtils.java

@@ -2,7 +2,6 @@ package com.uuzuche.lib_zxing.activity;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
 import android.graphics.Matrix;
 import android.hardware.Camera;
 import android.os.Bundle;
@@ -24,7 +23,6 @@ import com.uuzuche.lib_zxing.camera.CameraManager;
 import com.uuzuche.lib_zxing.decoding.DecodeFormatManager;
 
 import java.util.Hashtable;
-import java.util.Objects;
 import java.util.Vector;
 
 /**
@@ -102,6 +100,52 @@ public class CodeUtils {
         }
     }
 
+
+    /**
+     * 解析二维码图片工具类
+     * @param analyzeCallback
+     */
+    public static void analyzeBitmap(Bitmap mBitmap, AnalyzeCallback analyzeCallback) {
+        MultiFormatReader multiFormatReader = new MultiFormatReader();
+
+        // 解码的参数
+        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(2);
+        // 可以解析的编码类型
+        Vector<BarcodeFormat> decodeFormats = new Vector<BarcodeFormat>();
+        if (decodeFormats == null || decodeFormats.isEmpty()) {
+            decodeFormats = new Vector<BarcodeFormat>();
+
+            // 这里设置可扫描的类型,我这里选择了都支持
+            decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS);
+            decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS);
+            decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);
+        }
+        hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats);
+        // 设置继续的字符编码格式为UTF8
+        // hints.put(DecodeHintType.CHARACTER_SET, "UTF8");
+        // 设置解析配置参数
+        multiFormatReader.setHints(hints);
+
+        // 开始对图像资源解码
+        Result rawResult = null;
+        try {
+            rawResult = multiFormatReader.decodeWithState(new BinaryBitmap(new HybridBinarizer(new BitmapLuminanceSource(mBitmap))));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if (rawResult != null) {
+            if (analyzeCallback != null) {
+                analyzeCallback.onAnalyzeSuccess(mBitmap, rawResult.getText());
+            }
+        } else {
+            if (analyzeCallback != null) {
+                analyzeCallback.onAnalyzeFailed();
+            }
+        }
+    }
+
+
     /**
      * 生成二维码图片
      * @param text