ソースを参照

修改定位工具类
添加扫码功能

niusongtao@dl-cg.com 5 年 前
コミット
c2d06032a4

+ 3 - 0
base_library/src/main/AndroidManifest.xml

@@ -49,6 +49,9 @@
         <activity android:name=".activityUtils.CameraDialogActivity"
             android:theme="@style/MyDialogStyle"/>
 
+        <activity android:name=".activityUtils.BarCodeScanActivity"
+            android:screenOrientation="portrait"/>
+
 
         <!--   适配7.0及以上获取uri     -->
         <provider

+ 161 - 0
base_library/src/main/java/com/mgtech/base_library/activityUtils/BarCodeScanActivity.java

@@ -0,0 +1,161 @@
+package com.mgtech.base_library.activityUtils;
+
+import android.Manifest;
+import android.content.Intent;
+import android.os.Vibrator;
+import android.widget.CompoundButton;
+
+import androidx.annotation.NonNull;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mgtech.base_library.R;
+import com.mgtech.base_library.R2;
+import com.mgtech.base_library.base.BaseActivity;
+import com.mgtech.base_library.router.RouterURLS;
+import com.mgtech.base_library.util.ToastUtils;
+
+import butterknife.BindView;
+import butterknife.OnCheckedChanged;
+import cn.bingoogolapple.qrcode.core.QRCodeView;
+import cn.bingoogolapple.qrcode.zxing.ZXingView;
+import pub.devrel.easypermissions.AfterPermissionGranted;
+import pub.devrel.easypermissions.EasyPermissions;
+
+/**
+ * @ProjectName: BaseLibrary
+ * @Package: com.tennor.base_library.base
+ * @ClassName: BarCodeScanActivity
+ * @Description: 条形码扫描
+ * @Author: 牛松涛
+ * @CreateDate: 2020/4/8 15:03
+ * @UpdateUser: 更新者:
+ * @UpdateDate: 2020/4/8 15:03
+ * @UpdateRemark: 更新说明:
+ * @Version: 1.0
+ */
+
+@Route(path = RouterURLS.BASE_BAR_CODE_SCAN_ACTIVITY_URL)
+public class BarCodeScanActivity extends BaseActivity implements QRCodeView.Delegate{
+    @BindView(R2.id.zxing_view)
+    ZXingView zxingView;
+
+    private Intent intent;
+
+    public static String BAR_CODE_INFO = "bar_code_info";
+
+    @Override
+    protected int initLayoutId() {
+        return R.layout.activity_barcode_scan;
+    }
+
+    @Override
+    protected void initView() {
+        zxingView.setDelegate(this);
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        methodRequiresCameraPermission();
+//        zxingView.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
+////        mZXingView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT); // 打开前置摄像头开始预览,但是并未开始识别
+//
+//        zxingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
+    }
+
+
+    @Override
+    protected void onStop() {
+        zxingView.stopCamera(); // 关闭摄像头预览,并且隐藏扫描框
+        super.onStop();
+    }
+
+    @Override
+    protected void onDestroy() {
+        zxingView.onDestroy(); // 销毁二维码扫描控件
+        super.onDestroy();
+    }
+
+    @OnCheckedChanged({R2.id.flash_btn})
+    public void OnCheckedChanged(CompoundButton button, boolean b){
+        int id = button.getId();
+        if (id == R.id.flash_btn){
+            if (b)
+                zxingView.openFlashlight();
+            else
+                zxingView.closeFlashlight();
+        }
+    }
+
+    private void vibrate() {
+        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
+        if (vibrator == null)
+            return;
+        vibrator.vibrate(200);
+    }
+
+
+    //扫码成功
+    @Override
+    public void onScanQRCodeSuccess(String result) {
+        vibrate();
+        if (intent == null)
+            intent = new Intent();
+        intent.putExtra(BAR_CODE_INFO,result);
+        setResult(RESULT_OK,intent);
+        finish();
+//        ARouter.getInstance().build(TmaRouterUrls.HOME_ACTIVITY_URL).navigation();
+    }
+
+    @Override
+    public void onCameraAmbientBrightnessChanged(boolean isDark) {
+        // 这里是通过修改提示文案来展示环境是否过暗的状态,接入方也可以根据 isDark 的值来实现其他交互效果
+        String tipText = zxingView.getScanBoxView().getTipText();
+        String ambientBrightnessTip = getString(R.string.camera_dark);
+        if (isDark) {
+            if (!tipText.contains(ambientBrightnessTip)) {
+                zxingView.getScanBoxView().setTipText(tipText + ambientBrightnessTip);
+            }
+        } else {
+            if (tipText.contains(ambientBrightnessTip)) {
+                tipText = tipText.substring(0, tipText.indexOf(ambientBrightnessTip));
+                zxingView.getScanBoxView().setTipText(tipText);
+            }
+        }
+    }
+
+    @Override
+    public void onScanQRCodeOpenCameraError() {
+        ToastUtils.showShort(R.string.camera_open_error);
+    }
+
+
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
+    }
+
+    @AfterPermissionGranted(10)
+    private void methodRequiresCameraPermission() {
+        String[] perms = {Manifest.permission.CAMERA};
+        if (EasyPermissions.hasPermissions(this, perms)) {
+            // Already have permission, do the thing
+            zxingView.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
+//        mZXingView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT); // 打开前置摄像头开始预览,但是并未开始识别
+
+            zxingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
+        } else {
+            // Do not have permissions, request them now
+            EasyPermissions.requestPermissions(this, getString(R.string.camera_permission),
+                    10, perms);
+        }
+    }
+}

+ 2 - 0
base_library/src/main/java/com/mgtech/base_library/router/RouterURLS.java

@@ -17,4 +17,6 @@ public class RouterURLS {
     public static final String ROUTER_SERVICE_BEAN = "/base_library/router/RouterServiceBean";
 
     public static final String BASE_CAMERA_DIALOG_URL = "/activityUtils/CameraDialogActivity";
+
+    public static final String BASE_BAR_CODE_SCAN_ACTIVITY_URL = "/activityUtils/BarCodeScanActivity";
 }

+ 15 - 1
base_library/src/main/java/com/mgtech/base_library/util/GoogleLocationUtil.java

@@ -24,6 +24,8 @@ import androidx.core.content.ContextCompat;
 import com.coorchice.library.utils.LogUtils;
 import com.mgtech.base_library.R;
 
+import java.util.List;
+
 import pub.devrel.easypermissions.AfterPermissionGranted;
 import pub.devrel.easypermissions.EasyPermissions;
 
@@ -39,7 +41,7 @@ import pub.devrel.easypermissions.EasyPermissions;
  * @UpdateRemark: 更新说明:
  * @Version: 1.0
  */
-public class GoogleLocationUtil {
+public class GoogleLocationUtil{
     private Activity context;
     private LocationInfoListener locationInfoListener;
 
@@ -55,6 +57,18 @@ public class GoogleLocationUtil {
         this.locationInfoListener = locationInfoListener;
     }
 
+    public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
+        // Some permissions have been granted
+        // 请求权限已经被授权
+    }
+
+    public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
+        // Some permissions have been denied
+        // 请求权限被拒绝
+        if (locationInfoListener != null)
+            locationInfoListener.locationFailed(context.getString(R.string.map_permission_failure));
+    }
+
     public interface LocationInfoListener{
         void locationSuccess(double lat, double lng);
 

BIN
base_library/src/main/res/drawable-xxhdpi/flash_off.png


BIN
base_library/src/main/res/drawable-xxhdpi/flash_on.png


BIN
base_library/src/main/res/drawable-xxhdpi/scan_icon_scanline.png


+ 5 - 0
base_library/src/main/res/drawable/flash_selector.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+<item android:drawable="@drawable/flash_on" android:state_checked="true"/>
+    <item android:drawable="@drawable/flash_off"/>
+</selector>

+ 65 - 0
base_library/src/main/res/layout/activity_barcode_scan.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+<!--    <com.asr.common_util_library.custom.MyTitleView-->
+<!--        android:id="@+id/my_title"-->
+<!--        android:layout_width="match_parent"-->
+<!--        android:layout_height="wrap_content"-->
+<!--        app:layout_constraintTop_toTopOf="parent"-->
+<!--        app:left_image="@drawable/ic_white_back"-->
+<!--        app:title_bg_color="@color/app_color"-->
+<!--        app:title_text="@string/scan_verification"-->
+<!--        app:title_text_color="@color/white" />-->
+
+    <cn.bingoogolapple.qrcode.zxing.ZXingView
+        android:id="@+id/zxing_view"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_0"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:qrcv_animTime="1000"
+        app:qrcv_barCodeTipText="@string/bar_code_scan"
+        app:qrcv_barcodeRectHeight="120dp"
+        app:qrcv_borderColor="@color/white"
+        app:qrcv_borderSize="1dp"
+        app:qrcv_cornerColor="@color/light_blue"
+        app:qrcv_cornerDisplayType="center"
+        app:qrcv_cornerLength="20dp"
+        app:qrcv_cornerSize="3dp"
+        app:qrcv_customScanLineDrawable="@drawable/scan_icon_scanline"
+        app:qrcv_isAutoZoom="true"
+        app:qrcv_isBarcode="false"
+        app:qrcv_isOnlyDecodeScanBoxArea="false"
+        app:qrcv_isScanLineReverse="true"
+        app:qrcv_isShowDefaultGridScanLineDrawable="false"
+        app:qrcv_isShowDefaultScanLineDrawable="true"
+        app:qrcv_isShowLocationPoint="true"
+        app:qrcv_isShowTipBackground="true"
+        app:qrcv_isShowTipTextAsSingleLine="false"
+        app:qrcv_isTipTextBelowRect="false"
+        app:qrcv_maskColor="@color/black_alpha_60"
+        app:qrcv_qrCodeTipText="@string/bar_qr_code_scan"
+        app:qrcv_rectWidth="300dp"
+        app:qrcv_scanLineColor="@color/light_blue"
+        app:qrcv_scanLineMargin="0dp"
+        app:qrcv_scanLineSize="0.5dp"
+        app:qrcv_tipTextColor="@color/white"
+        app:qrcv_tipTextSize="12sp"
+        app:qrcv_toolbarHeight="@dimen/dp_100"
+        app:qrcv_topOffset="65dp"
+        app:qrcv_verticalBias="-1" />
+
+    <CheckBox
+        android:id="@+id/flash_btn"
+        android:layout_width="@dimen/dp_50"
+        android:layout_height="@dimen/dp_50"
+        android:layout_marginBottom="@dimen/dp_30"
+        android:background="@drawable/flash_selector"
+        android:button="@null"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 6 - 0
base_library/src/main/res/values/strings.xml

@@ -61,6 +61,12 @@
     <string name="have_no_whats_app">You have not installed WhatsApp or the WhatsApp version is too low</string>
 
 
+    <string name="bar_code_scan">将条码放入框内,即可自动扫描</string>
+    <string name="bar_qr_code_scan">将二维码/条码放入框内,即可自动扫描</string>
+    <string name="camera_open_error">相机打开出错</string>
+    <string name="camera_dark">\n环境过暗,请打开闪光灯</string>
+
+
 
 
     <string name="biometricprompt_tip">Tip</string>