Giter Site home page Giter Site logo

android-zxinglibrary's Introduction

android-zxingLibrary

更新日志

  • compile 1.3 2016/08/02 优化扫描API

  • compile 1.4 2016/08/03 修复扫描时二维码拉伸问题

  • compile 1.5 2016/08/05 更新控制闪光灯API

  • compile 1.6 2016/08/08 更新生成带logo二维码时logo不带边距可能存在的问题

  • compile 1.7 2016/08/09 修改默认扫描框的大小,适配不同分辨率手机,修改自定义扫描框属性类型

  • compile 1.8 2016/08/10 修复解析二维码图片时可能存在的OOM问题

  • compile 1.9 2016/09/07 Library库中删除Application,在demo库中的Application执行初始化操作

  • compile 2.0 2016/10/12 测试Demo中添加Android M权限处理,代码库添加自定义属性支持小圆点是否展示

  • compile 2.1 2016/11/22 修复扫描中的一些bug

  • compile 2.2 2017/07/04 更新zxing包,修复一些已知的bug

使用说明

  • 可打开默认二维码扫描页面

  • 支持对图片Bitmap的扫描功能

  • 支持对UI的定制化操作

  • 支持对条形码的扫描功能

  • 支持生成二维码操作

  • 支持控制闪光灯开关

使用方式:

  • 集成默认的二维码扫描页面

在具体介绍该扫描库之前我们先看一下其具体的使用方式,看看是不是几行代码就可以集成二维码扫描的功能。

  • 在module的build.gradle中执行compile操作
compile 'cn.yipianfengye.android:zxing-library:2.2'
  • 在demo Application中执行初始化操作
@Override
    public void onCreate() {
        super.onCreate();

        ZXingLibrary.initDisplayOpinion(this);
    }
  • 在代码中执行打开扫描二维码界面操作
/**
         * 打开默认二维码扫描界面
         */
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });

这里的REQUEST_CODE是我们定义的int型常量。

  • 在Activity的onActivityResult方法中接收扫描结果
/**
         * 处理二维码扫描结果
         */
        if (requestCode == REQUEST_CODE) {
            //处理扫描结果(在界面上显示)
            if (null != data) {
                Bundle bundle = data.getExtras();
                if (bundle == null) {
                    return;
                }
                if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    String result = bundle.getString(CodeUtils.RESULT_STRING);
                    Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
                    Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                }
            }
        }

怎么样是不是很简单?下面我们可以来看一下具体的执行效果:

执行效果:

image

但是这样的话是不是太简单了,如果我想选择图片解析呢?别急,对二维码图片的解析也是支持的

  • 集成对二维码图片的解析功能

  • 调用系统API打开图库

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_IMAGE);
  • 在Activity的onActivityResult方法中获取用户选中的图片并调用二维码图片解析API
if (requestCode == REQUEST_IMAGE) {
            if (data != null) {
                Uri uri = data.getData();
                ContentResolver cr = getContentResolver();
                try {
                    Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片

                    CodeUtils.analyzeBitmap(mBitmap, new CodeUtils.AnalyzeCallback() {
                        @Override
                        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                            Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onAnalyzeFailed() {
                            Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                        }
                    });

                    if (mBitmap != null) {
                        mBitmap.recycle();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

执行效果

image

有了默认的二维码扫描界面,也有了对二维码图片的解析,可能有的同学会说如果我想定制化显示UI怎么办呢?没关系也支持滴。

  • 定制化显示扫描UI

由于我们的扫描组件是通过Fragment实现的,所以能够很轻松的实现扫描UI的定制化。

  • 在新的Activity中定义Layout布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_second"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/second_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="10dp"
        android:layout_gravity="bottom|center_horizontal"
        />

    <FrameLayout
        android:id="@+id/fl_my_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></FrameLayout>

</FrameLayout>

启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件,也就是说我们会将我们定义的扫描Fragment替换到id为fl_my_container的FrameLayout的位置。而上面的button是我们添加的一个额外的控件,在这里你可以添加任意的控件,各种UI效果等。具体可以看下面在Activity的初始化过程。

  • 在Activity中执行Fragment的初始化操作
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        /**
         * 执行扫面Fragment的初始化操作
         */
        CaptureFragment captureFragment = new CaptureFragment();
        // 为二维码扫描界面设置定制化界面
        CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera);
        
        captureFragment.setAnalyzeCallback(analyzeCallback);
        /**
         * 替换我们的扫描控件
         */ getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();
    }

其中analyzeCallback是我们定义的扫描回调函数,其具体的定义:

/**
     * 二维码解析回调函数
     */
    CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() {
        @Override
        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
            Intent resultIntent = new Intent();
            Bundle bundle = new Bundle();
            bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS);
            bundle.putString(CodeUtils.RESULT_STRING, result);
            resultIntent.putExtras(bundle);
            SecondActivity.this.setResult(RESULT_OK, resultIntent);
            SecondActivity.this.finish();
        }

        @Override
        public void onAnalyzeFailed() {
            Intent resultIntent = new Intent();
            Bundle bundle = new Bundle();
            bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED);
            bundle.putString(CodeUtils.RESULT_STRING, "");
            resultIntent.putExtras(bundle);
            SecondActivity.this.setResult(RESULT_OK, resultIntent);
            SecondActivity.this.finish();
        }
    };

仔细看的话,你会发现我们调用了CondeUtils.setFragmentArgs方法,该方法主要用于修改扫描界面扫描框与透明框相对位置的,与若不调用的话,其会显示默认的组件效果,而如果调用该方法的话,可以修改扫描框与透明框的相对位置等UI效果,我们可以看一下my_camera布局文件的实现。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <SurfaceView
        android:id="@+id/preview_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <com.uuzuche.lib_zxing.view.ViewfinderView
        android:id="@+id/viewfinder_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:inner_width="200dp"
        app:inner_height="200dp"
        app:inner_margintop="150dp"
        app:inner_corner_color="@color/scan_corner_color"
        app:inner_corner_length="30dp"
        app:inner_corner_width="5dp"
        app:inner_scan_bitmap="@drawable/scan_image"
        app:inner_scan_speed="10"
        app:inner_scan_iscircle="false"
        />

</FrameLayout>

上面我们自定义的扫描控件的布局文件,下面我们看一下默认的扫描控件的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <SurfaceView
        android:id="@+id/preview_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <com.uuzuche.lib_zxing.view.ViewfinderView
        android:id="@+id/viewfinder_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</FrameLayout>

可以发现其主要的区别就是在自定义的扫描控件中多了几个自定义的扫描框属性:

<declare-styleable name="innerrect">
        <attr name="inner_width" format="dimension"/><!-- 控制扫描框的宽度 -->
        <attr name="inner_height" format="dimension"/><!-- 控制扫描框的高度 -->
        <attr name="inner_margintop" format="dimension" /><!-- 控制扫描框距离顶部的距离 -->
        <attr name="inner_corner_color" format="color" /><!-- 控制扫描框四角的颜色 -->
        <attr name="inner_corner_length" format="dimension" /><!-- 控制扫描框四角的长度 -->
        <attr name="inner_corner_width" format="dimension" /><!-- 控制扫描框四角的宽度 -->
        <attr name="inner_scan_bitmap" format="reference" /><!-- 控制扫描图 -->
        <attr name="inner_scan_speed" format="integer" /><!-- 控制扫描速度 -->
        <attr name="inner_scan_iscircle" format="boolean" /><!-- 控制小圆点是否展示 -->
    </declare-styleable>

通过以上几个属性我们就可以定制化的显示我们的扫描UI了,比如定制化微信扫描UI:

执行效果

image

当然了如果以上的以上,你还是对定制化UI方面不太满意,可以直接下载我的项目,然后引入lib-zxing module作为你的module,直接修改其代码。

  • 生成二维码图片

  • 生成带Logo的二维码图片:

/**
         * 生成二维码图片
         */
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String textContent = editText.getText().toString();
                if (TextUtils.isEmpty(textContent)) {
                    Toast.makeText(ThreeActivity.this, "您的输入为空!", Toast.LENGTH_SHORT).show();
                    return;
                }
                editText.setText("");
                mBitmap = CodeUtils.createImage(textContent, 400, 400, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
                imageView.setImageBitmap(mBitmap);
            }
        });
  • 生成不带logo的二维码图片
/**
         * 生成不带logo的二维码图片
         */
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String textContent = editText.getText().toString();
                if (TextUtils.isEmpty(textContent)) {
                    Toast.makeText(ThreeActivity.this, "您的输入为空!", Toast.LENGTH_SHORT).show();
                    return;
                }
                editText.setText("");
                mBitmap = CodeUtils.createImage(textContent, 400, 400, null);
                imageView.setImageBitmap(mBitmap);
            }
        });
  • 执行效果

image

  • 支持控制闪光灯
/**
 * 打开闪光灯
 */
CodeUtils.isLightEnable(true);

/**
 * 关闭闪光灯
 */
 CodeUtils.isLightEnable(false);

也可以参考我的博客:几行代码快速集成二维码扫描库

android-zxinglibrary's People

Contributors

jp1017 avatar lovejjfg avatar shenyuanqing avatar walkthehorizon avatar yipianfengye avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-zxinglibrary's Issues

黑屏

不管用自带的CaptureActivity 还是自定义的activity Framelayout显示都是黑屏。。该怎么解决呢

同时使用的第三方库里集成有zxing,gradle里exclude掉仍然报错

您好:
我在编译apk时遇到,因为我使用的支付工具 beecloud里集成了zxing-3.2.0, 再使用您的库时,编译就会报错,Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/zxing/aztec/AztecDetectorResult.class

在gradle中compile ('cn.yipianfengye.android:zxing-library:1.6'){
exclude group: 'com.google.zxing',module:'library' } 仍然不行

华为 Mate8 打开黑屏

W/CameraBase: An error occurred while connecting to camera: 0
E/Camera-JNI: android_hardware_Camera_native_setup Error: -1
E/Camera: Camera new cameraInitNormal:-1

4.4.2系统,打开黑屏

魅族,小米,其他的款式都打不开 打开的时候显示Should have subtitle controller already set

compileSdkVersion为22编译不通过

  1. 我将app和lib-zxing中的build.gradle文件中的编译sdk改为22,相应的tools编译工具改为22.0.1、dependencies中的支持包也改为22.2.1, 无法通过编译,一直values-23中的资源找不到。
  2. 都没用23的编译,为什么会报这个错误?非常感谢

调用基础扫描报错

环境:MX4 5.1
调用基础扫描后报错,且界面是一个加号不是四角带滚动条的框?
log:
java.lang.IllegalArgumentException: Both dimensions must be greater than 0
at com.google.zxing.common.BitMatrix.(BitMatrix.java:50)
at com.google.zxing.common.GlobalHistogramBinarizer.getBlackMatrix(GlobalHistogramBinarizer.java:91)
at com.google.zxing.common.HybridBinarizer.getBlackMatrix(HybridBinarizer.java:86)
at com.google.zxing.BinaryBitmap.getBlackMatrix(BinaryBitmap.java:85)
at com.google.zxing.qrcode.QRCodeReader.decode(QRCodeReader.java:77)
at com.google.zxing.MultiFormatReader.decodeInternal(MultiFormatReader.java:171)
at com.google.zxing.MultiFormatReader.decodeWithState(MultiFormatReader.java:85)
at com.uuzuche.lib_zxing.decoding.DecodeHandler.decode(DecodeHandler.java:86)
at com.uuzuche.lib_zxing.decoding.DecodeHandler.handleMessage(DecodeHandler.java:55)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at com.uuzuche.lib_zxing.decoding.DecodeThread.run(DecodeThread.java:83)

无法横屏扫描条形码

我有个项目,因为是用在平板上,所以解析条形码需要横屏扫描,可我尝试了很多次,无法横屏解析条形码,希望作者能够添加该功能

解析相册中二维码图片的问题

解析图库中二维码图片代码部分的这句: CodeUtils.analyzeBitmap(mBitmap, new CodeUtils.AnalyzeCallback() 第一个参数是bitmap ,为何CodeUtils中的analyzeBitmap的静态方法第一个传的参数却是String类型的?报错了~

onActivityResult()回调中崩溃(Nexus 6-api24)

E/AndroidRuntime: FATAL EXCEPTION: main
Process: cn.hongjitech.onroad, PID: 2334
java.lang.RuntimeException: Camera is being used after Camera.release() was called
at android.hardware.Camera._stopPreview(Native Method)
at android.hardware.Camera.stopPreview(Camera.java:730)
at com.uuzuche.lib_zxing.activity.CaptureFragment.surfaceDestroyed(CaptureFragment.java:183)
at android.view.SurfaceView.updateWindow(SurfaceView.java:592)
at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:251)
at android.view.View.dispatchWindowVisibilityChanged(View.java:10276)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:1289)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1534)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
at android.view.Choreographer.doCallbacks(Choreographer.java:683)
at android.view.Choreographer.doFrame(Choreographer.java:619)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

建议

扫描线速度有点慢,给人卡顿的感觉,建议优化一下。

建议做成控件

感谢作者的封装,已经在项目中使用了,以前都是自己导入原版的删掉没用的那些.建议:使用Activity+onActivityResult方式耦合度有点高,而且不利于api设计,如果做成View+CallBack,侵入性降低,API设计也可以更加规范.

扫一扫崩溃了

1.9版本的
下面是错误码:

java.lang.IllegalArgumentException: Both dimensions must be greater than 0
at com.google.zxing.common.BitMatrix.(BitMatrix.java:50)
at com.google.zxing.common.GlobalHistogramBinarizer.getBlackMatrix(GlobalHistogramBinarizer.java:91)
at com.google.zxing.common.HybridBinarizer.getBlackMatrix(HybridBinarizer.java:86)
at com.google.zxing.BinaryBitmap.getBlackMatrix(BinaryBitmap.java:85)
at com.google.zxing.qrcode.QRCodeReader.decode(QRCodeReader.java:77)
at com.google.zxing.MultiFormatReader.decodeInternal(MultiFormatReader.java:171)
at com.google.zxing.MultiFormatReader.decodeWithState(MultiFormatReader.java:85)
at com.uuzuche.lib_zxing.decoding.DecodeHandler.decode(DecodeHandler.java:86)
at com.uuzuche.lib_zxing.decoding.DecodeHandler.handleMessage(DecodeHandler.java:55)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at com.uuzuche.lib_zxing.decoding.DecodeThread.run(DecodeThread.java:83)

ZApplication与自定义Application冲突

compile 'cn.yipianfengye.android:zxing-library:1.8' 导入项目后发现与自定义application冲突,
使用tools:replace="android:name"避免了冲突,但是会报错Both dimensions must be greater than 0。
直接导入项目作为module使用,删除ZApplication类,将ZApplication的initDisplayOpinion方法作为初始化方法在自定义Application中调用,运行正常。
建议lib中的ZApplication类修改为不继承自Application类,作为初始化类提供initDisplayOpinion方法给使用者在自定义Application中调用

二维码图片的解析功能 代码有问题啊

                Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片
                CodeUtils.analyzeBitmap(mBitmap, new CodeUtils.AnalyzeCallback() {
                    @Override
                    public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                        Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                    }

传入的是一个bitmanp,但是函数接收的是一个字符串类型啊,怎么解决啊??

请问可否设置解析完成不让震动,谢谢

因为我是引入库的,所以不能修改,如果我直接当module是可以修改的,我在源码中看到是可以修改playBeepSoundAndVibrate()的,只是一个建议,建议您开放一个接口出来可以修改声音和震动,因为项目中可能需求只要声音或只要震动或者两者都不要,谢谢

1.7依赖有问题

似乎你library的Manifest清单里的Application存在name(com.uuzuche.lib_zxing.ZApplication)字段,依赖会报错,我下载了library来依赖去掉就可以了。

权限改为询问后,再次进入定制化扫描崩溃

请问这个问题怎么解决,谢谢!这个bug一直存在,是必现的
Process: com.uuch.android_zxinglibrary, PID: 4621
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=101, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.uuch.android_zxinglibrary/com.uuch.android_zxinglibrary.MainActivity}: java.lang.RuntimeException: Cannot execute non-void method cameraTask
at android.app.ActivityThread.deliverResults(ActivityThread.java:3706)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3749)
at android.app.ActivityThread.access$1400(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5438)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
Caused by: java.lang.RuntimeException: Cannot execute non-void method cameraTask
at pub.devrel.easypermissions.EasyPermissions.runAnnotatedMethods(EasyPermissions.java:297)
at pub.devrel.easypermissions.EasyPermissions.onRequestPermissionsResult(EasyPermissions.java:241)
at com.uuch.android_zxinglibrary.MainActivity.onRequestPermissionsResult(MainActivity.java:143)
at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6634)
at android.app.Activity.dispatchActivityResult(Activity.java:6512)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3702)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3749) 
at android.app.ActivityThread.access$1400(ActivityThread.java:153) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5438) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.