Android使用zxing-core2.2.jar快速实现简单的二维码扫码功能
之前做项目做过二维码扫描的功能,做完时感觉挺简单的,就没有记录。最近又要用到这个功能啦,于是就翻开之前的项目从里面把这个扫描器功能给找出来啦,这时候才发现原来的项目已经不单单是一个扫码功能啦,把这个功能给单独弄出来还真是费啦不少功夫,于是就整理打包啦下整合扫描器功能的步骤方便下次使用
效果图如下
权限声明
声明要用的权限和添加的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 的引用
更多的功能请参数这个示例,功能很全
https://github.com/mylhyl/Android-Zxing