• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 二维码Zxing&Zbar,zxing

二维码Zxing&Zbar,zxing

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了zxing生成二维码,zxing二维码官网,zxing二维码扫描,zxing二维码android,zxing识别二维码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

二维码Zxing&Zbar,zxing


二维码Zxing&Zbar

 

前言:该项目主要介绍了二维码扫描、闪光灯开启、本地二维码图片识别、二维码生成。分别是zxing和zbar(网格二维码)分别实现,具体效果运行项目apk...

 

开发环境:AndroidStudio2.2.1+gradle-2.14.1

 

涉及知识:
    1.Zxing和Zbar(网格)二维码扫描
    2.闪光灯开启与关闭
    3.本地二维码识别
    4.二维码生成
    5.Handler机制
    6.butterknife注解式开发

 

引入依赖:

 

    compile 'com.android.support:appcompat-v7:22.+'
    compile 'com.google.zxing:core:3.2.1'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile files('libs/zbar.jar')

 

部分代码:

/**
 * Zbar二维码扫描+闪光灯+本地二维码识别
 */
public class ZbarActivity extends AppCompatActivity implements QRCodeView.Delegate {

    @Bind(R.id.zbarview)
    ZBarView mQRCodeView;

    @Bind(R.id.scancode_lamplight)
    ToggleButton toggleButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.zbartest_scan_layout);
        ButterKnife.bind(this);
        initLayout();
    }

    private void initLayout() {
        mQRCodeView.setDelegate(this);
        mQRCodeView.startSpotAndShowRect();//显示扫描框,并且延迟1.5秒后开始识别
        toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    mQRCodeView.openFlashlight();
                } else {
                    mQRCodeView.closeFlashlight();
                }
            }
        });
    }

    @OnClick({R.id.line_back, R.id.scancode_localimg})
    protected void onClickBtn(View view) {
        switch (view.getId()) {
            case R.id.line_back:
                finish();
                break;
            case R.id.scancode_localimg:
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent, 0x11);
                break;
            default:
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == 0x11) {
            Uri uri = data.getData();
            String path = null;
            if (!TextUtils.isEmpty(uri.getAuthority())) {
                Cursor cursor = getContentResolver().query(uri,
                        new String[]{MediaStore.Images.Media.DATA}, null, null, null);
                if (null == cursor) {
                    Toast.makeText(ZbarActivity.this, "图片没找到", Toast.LENGTH_SHORT).show();
                    return;
                }
                cursor.moveToFirst();
                path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                cursor.close();
            } else {
                path = uri.getPath();
            }
            if (null != path) {
                codeDiscriminate(path);
            } else {
                Toast.makeText(ZbarActivity.this, "图片路径为空", Toast.LENGTH_SHORT).show();
                return;
            }
        }
    }

    @Override
    protected void onRestart() {
        mQRCodeView.startCamera();
        super.onRestart();
    }

    @Override
    public void onResume() {
        super.onResume();
        mQRCodeView.startSpotAndShowRect();//显示扫描框,并且延迟1.5秒后开始识别
    }

    @Override
    protected void onStop() {
        mQRCodeView.stopCamera();
//        mQRCodeView.closeFlashlight();
        super.onStop();
    }

    private void vibrate() {
        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        vibrator.vibrate(200);
    }

    private void codeDiscriminate(final String path) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                Looper.prepare();
                String result = null;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    result = QRCodeDecoder.syncDecodeQRCode(path);
                } else {
                    result = QRCodeDecoder.syncDecodeQRCode2(path);
                }
                Log.i("zbar_result", Build.VERSION.SDK_INT + "--->" + result);
                Message msg = mHandler.obtainMessage();
                //封装消息id
                msg.what = 1;//作为标示,便于接收消息
                msg.obj = result;
                mHandler.sendMessage(msg);//发送消息
            }
        }).start();
    }


    //创建一个Hander局部类对象,通过handleMessage()钩子方法来更新UI控件
    Handler mHandler = new Handler() {

        public void handleMessage(Message msg) {
            //得到封装消息的id进行匹配
            if (1 == msg.what) {
                if (null != msg.obj)
                    onScanQRCodeSuccess(msg.obj.toString());
            }
        }

    };


    @Override
    protected void onDestroy() {
        mQRCodeView.onDestroy();
        ButterKnife.unbind(this);
        super.onDestroy();

    }

    @Override
    public void onScanQRCodeSuccess(String resu



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 二维码Zxing&Zbar,zxing
  • 二维码的扫描和生成--第三方开源--ZXing,--第三方开源--zxing

相关文章

  • 2017-05-26Android5.0新特性-Material Design
  • 2017-05-26玩转Android---事件监听篇---第2篇,android---第2篇
  • 2017-05-26硅谷新闻8--TabLayout替换ViewPagerIndicator,tablayoutindicator
  • 2017-05-26可展开的列表组件——ExpandableListView深入解析,expandablelist展开
  • 2017-05-26功能强大的StickyHeaderListView:标题渐变、吸附悬停、筛选分类、动态头部,
  • 2017-05-26Android开发必看-快速提高 Android 开发效率的 Web 工具,android必看
  • 2017-05-26Android实用技巧-缓存的使用分析
  • 2017-05-26XamarinAndroid 自动绑定View变量,xamarinandroidview
  • 2017-05-26[android] 手机卫士自定义对话框布局,android卫士
  • 2017-05-26Android Studio导入第三方库(SlidingMenu)教程,androidslidingmenu

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 手机IMEI获取,imei获取
    • Java多线程常见问题,java多线程
    • Android百度地图API集成一《基础地图》,集成百度地图api
    • ViewPager结合view无限滑动,viewpagerview滑动
    • android源码解析之(十一)--)应用进程启动流程
    • 老人桌面===花花绿绿的桌面,老人桌面
    • android fragment生命周期应用
    • Android 在Activity页面中如何实现Fragment数据的缓加载
    • Android ListView onItemClick Not Work,androidonitemclick
    • 我的第一节Android课,第一节Android课

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有