Android使用zxing-core2.2.jar快速实现简单的二维码扫码功能

来源:赵克立博客 分类: Android 标签:Android发布时间:2017-10-15 13:36:53最后更新:2017-10-17 14:33:15浏览:4259
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-10-17 14:33:15
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

之前做项目做过二维码扫描的功能,做完时感觉挺简单的,就没有记录。最近又要用到这个功能啦,于是就翻开之前的项目从里面把这个扫描器功能给找出来啦,这时候才发现原来的项目已经不单单是一个扫码功能啦,把这个功能给单独弄出来还真是费啦不少功夫,于是就整理打包啦下整合扫描器功能的步骤方便下次使用

效果图如下

image.png

权限声明

声明要用的权限和添加的activity

<!-- 二维码扫描 -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--启动扫码新添加的activity-->
<activity
    android:name="com.codescan.MipcaActivityCapture"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateAlwaysHidden" >
</activity>
<activity android:name="com.codescan.ScanCodeActivity"></activity>

接收扫描结果

扫描完成后肯定要接收扫描结果文本或者图片,所以要事先在启动扫描的activity中写一个回调函数来接收扫描的结果,在MainActivity类中重载activity的onActivityResult函数来取扫描结果,扫描器扫描成功后为填充数据并反回给这个activity,这个函数的使用说明如下

onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪个Activity返回的。这个requestCode和startActivityForResult中的requestCode相对应。

第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。

第三个参数:一个Intent对象,带有返回的数据。

//扫描完成后接收扫描结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case SCANNIN_GREQUEST_CODE:
            if (resultCode == -1) {
                Bundle bundle = data.getExtras();
                //取出扫描到的内容
                String str = bundle.getString("result");
                //调用外部浏览器
                String regEx = "^http\\://.*$";
                Pattern pattern = Pattern.compile(regEx);
                Matcher matcher = pattern.matcher(str);
                boolean b = matcher.matches();
                if (b) {
                    try {
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse(str));
                        startActivity(intent);
                    } catch (Exception e) {
                        Log.v("liulan", e.getMessage());
                    }
                }
                //显示图片数据到img标签中
                //mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
            }
            break;
    }
}

启动扫描器

先在Mainactivity中定义一个静态成员变量

final static int SCANNIN_GREQUEST_CODE = 1;

在MainActivity中的一个按钮的单击事件中启动扫描器

Intent intent = new Intent();
intent.setClass(this, ScanCodeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, SCANNIN_GREQUEST_CODE);

最后就是下载下面这个附件然后根据对应的目录覆盖进去,要注意里面如果有跟你的文件有重复的先不要急着覆盖,打开看看跟你现有项目合并即可,另外还有改动资料包  com.R 的引用


qrcode.zip


更多的功能请参数这个示例,功能很全

https://github.com/mylhyl/Android-Zxing


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python