Android实现扫描二维码

PS:有的朋友可能会扫描出现问题,如果报异常“SecurityException”同时读者又确切的把相机权限加上去了,这时候请检查,你的设备是不是6.0,或者6.0以后,这里面牵扯到一个动态权限的问题。需要增加一段代码。在文章里我注释掉了,打开注释即可。
这个是安卓6.0 以后的需要调用某些设备的时候需要动态增加权限,是安全问题提升的一个表现

开发工具:AS

作为伸手党,首先感谢开源库的作者GuoJinyu,有兴趣的可以前去学习,

1.添加依赖

compile 'com.acker:simplezxing:1.2'

2.在需要的地方调用:(这里需要注意,如果你的设别API很高,在6.0,可能需要动态申请权限)

if (Build.VERSION.SDK_INT >= 23) {
        int checkCallPhonePermission = 
ContextCompat.checkSelfPermission(ZXingActivity.this,Manifest.permission.CAMERA);
        if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(ZXingActivity.this, new String[]{Manifest.permission.CAMERA}, 222);
        return;
        } else {
        startCamera();
        }
        } else {
        startCamera();
}

startCamera() 方法如下:

private void startCamera() {
        Intent intent = new Intent(this, CaptureActivity.class);
        Bundle bundle = new Bundle();
        bundle.putBoolean(CaptureActivity.KEY_NEED_BEEP, CaptureActivity.VALUE_BEEP);
        bundle.putBoolean(CaptureActivity.KEY_NEED_VIBRATION, CaptureActivity.VALUE_VIBRATION);
        bundle.putBoolean(CaptureActivity.KEY_NEED_EXPOSURE, CaptureActivity.VALUE_NO_EXPOSURE);
        bundle.putByte(CaptureActivity.KEY_FLASHLIGHT_MODE, CaptureActivity.VALUE_FLASHLIGHT_OFF);
        bundle.putByte(CaptureActivity.KEY_ORIENTATION_MODE, CaptureActivity.VALUE_ORIENTATION_AUTO);
        intent.putExtra(CaptureActivity.EXTRA_SETTING_BUNDLE, bundle);
        startActivityForResult(intent, CaptureActivity.REQ_CODE);
    }

3.重写onActivityResult:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String scanInfo;
        switch (requestCode) {
            case CaptureActivity.REQ_CODE:
                scanInfo = data.getStringExtra(CaptureActivity.EXTRA_SCAN_RESULT);
                switch (resultCode) {
                    case RESULT_OK:
                        Log.d(TAG,scanInfo);  //or do sth
                        mTextView.setText(scanInfo);
                        break;
                    case RESULT_CANCELED:
                        if (data != null) {
                            // for some reason camera is not working correctly
                            Log.d(TAG,data.getStringExtra(CaptureActivity.EXTRA_SCAN_RESULT));
                        }
                        break;
                }
                break;
        }
    }

对"第3步"onActivityResult 方法中 data 解释:

data.getStringExtra(CaptureActivity.EXTRA_SCAN_RESULT); //这行用来接收二维码信息

startCaptureActivityForResult()方法的配置信息在bundle参数描述的很详细,可以参阅

最后别忘了权限问题

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,815评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,769评论 19 139
  • 二维码扫描最近两年简直是风靡移动互联网时代,尤其在国内发展神速。围绕条码扫码功能,首先说说通过本文你可以知道啥。一...
    55book阅读 9,662评论 0 1
  • 相隔八年,她再与他相遇,他仍然是游走于上流社会与女人之间的作家,她从当年青涩的女大学生蜕变成一个极富魅力的贵妇人,...
    清风随阅读 3,196评论 0 2
  • 坐火车,乘汽车,一路颠颠簸簸的终于来到了乡下。 回到外婆家,外婆正在掰玉米喂鸡,一见我来便拉着...
    风雪虚城阅读 4,440评论 8 24