关于zxing二维码扫描的总结
2017-03-05 00:09
99 查看
众所周知,google的开源zxing二维码扫面,实现了我们基本的项目需求,然而里面还有很多问题需要解决,github上有许多大牛对zxing进行了封装,这边参考了“一片枫叶”的zxing项目。talk is cheap ,show me the code!
1.主activity实现下面几种功能
2.onActivityResult处理返回内容
3.难点:自定义二维码界面
问题一:通过uri得到string类型的根路径,该方法在一片枫叶的文档中是错误的,根本无法转换,通过搜索资料查询到需要自己重写一个工具类进行转换ImageUtils.getImageAbsolutePath(this, uri)。
问题二:在打开闪光灯的时候,一片枫叶的文档上Camera camera = CameraManager.get().getCamera();Android6.0根本无法获得相机,最后改方法为Camera camera= Camera.open();
最后:感谢一片枫叶的demo https://github.com/yipianfengye/android-zxingLibrary
该项目已同步到我的github:https://github.com/zziafyc/QRcodeDemo
1.主activity实现下面几种功能
//普通扫描 mScanBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE); } }); //扫描图片解析 mScanImgBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, REQUEST_IMG); } }); //自定义UI mScanCustomUI.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, CustomCaptureActivity.class); startActivityForResult(intent, REQUEST_CUSTOM); } }); //生成图片二维码 mMakeQRImg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, MakeQRCodeImgActivity.class); startActivity(intent); } });
2.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(); } } } if (requestCode == REQUEST_IMG) { if (null != data) { Uri uri = data.getData(); ContentResolver cr = getContentResolver(); try { Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片 CodeUtils.analyzeBitmap(ImageUtils.getImageAbsolutePath(this, uri), 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(); } } } if (requestCode == REQUEST_CUSTOM) { //处理扫描结果(在界面上显示) 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(); } } } }
3.难点:自定义二维码界面
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_customcapture); cancelBtn= (Button) findViewById(R.id.ac_btn_cancel); CaptureFragment captureFragment = new CaptureFragment(); // 为二维码扫描界面设置定制化界面R_layout.my_camera CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera); /** * 二维码解析回调函数 */ 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); setResult(RESULT_OK, resultIntent); 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); setResult(RESULT_OK, resultIntent); finish(); } }; captureFragment.setAnalyzeCallback(analyzeCallback); /** * 替换我们的扫描控件 */ getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();
问题一:通过uri得到string类型的根路径,该方法在一片枫叶的文档中是错误的,根本无法转换,通过搜索资料查询到需要自己重写一个工具类进行转换ImageUtils.getImageAbsolutePath(this, uri)。
问题二:在打开闪光灯的时候,一片枫叶的文档上Camera camera = CameraManager.get().getCamera();Android6.0根本无法获得相机,最后改方法为Camera camera= Camera.open();
最后:感谢一片枫叶的demo https://github.com/yipianfengye/android-zxingLibrary
该项目已同步到我的github:https://github.com/zziafyc/QRcodeDemo
相关文章推荐
- 自己写的关于zxing二维码扫描的例子
- 关于zxing二维码扫描 远距离扫描才能成功
- 关于zxing二维码扫描开灯的问题
- 关于android6.0权限适配6.0系统以下的问题总结(二维码扫描)
- Android 关于zXing二维码扫描的一些事情
- ZXing二维码扫描添加个人总结
- [android总结]Zxing二维码扫描图片变形
- 关于ASP.NET在IIS一些问题的经验总结
- 关于ASPNET在IIS一些问题的经验总结
- 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!
- 关于WebForm的编辑列ItemTemplate和EditItemTemplate的一点小总结
- 关于在applet中使用JDBC访问数据库的一点总结
- 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!
- 关于PHP操作文件的一些FAQ总结
- 2004年7月5日清晨关于咨询的对话和我的总结
- [导入]关于ASPNET在IIS一些问题的经验总结
- OGRE·Irrlicht·初印象·及与古老意念关于不变性和可变性程度的讨论的一些总结
- 关于Oracle数据库的用户对象配置以及数据镜像的总结
- 关于如何jar的一点总结(转至JR论坛)
- 关于网站设计的整体设计步骤的总结