最近公司出的新产品中用到了二维码,由于之前只是简单的了解过,所以就先搜集了一下大神们的博客,发现很多都是基于1.6/1.7版本的,而现在都是3.3.0版本了,有一些稍微的变动了,所以决定自己动手丰衣足食,当然我在android领域中还是小白,如果有什么错误或者可以改进的,还请大神们多多指教哈,小弟在此感激不尽!好了,接下来就进入正题吧!
一、首先我们去GitHub上下载Zxing,这里附上GitHub上的地址:
https://github.com/zxing/zxing
我们将其减压后内容如下:
我们只需要关心图中3个蓝色部分内容就可以了(只对于二维码扫描而言),当然这三部分内容的意义在READEME中有说明,感兴趣的可以看看,在这里我就不班门弄斧了哈.
二、接下来就是把上面三部分蓝色内容部署到我们的工程中去:
1.首先将android目录下的src目录下的整个源码拷贝到我们工程中的src—>main—>java目录下,如下图:
2.将android-core目录下的CameraConfigurationUtils.Java拷贝到我们目录下(随意目录,我这里放在了utils目录下):
3.将android目录下的res资源拷贝或者整合到我们工程中的res对应的目录下(用于国际化的values我们可以不需要,根据自己情况来决定),如下图:
4.将zxing下的core目录打包成jar文件,然后将该jar文件拷贝到工程中的libs目录下,别忘了add as library.
做完以上几步的整个布局效果如下:
三、解决错误
上面我们已经把Zxing部署到我们的工程中了,现在我们build一下工程,会发现报了很多错误,这时候不要慌,基本都是些包路径错误,我们手动改一下就好了,我这里报的都是R文件路径不对,我只需要把R文件换成我们自己工程中的R文件路径就好了.
四、配置清单
接下来我们需要配置一下清单文件了,加上权限以及用到的activity,当然我们要适配6.0系统,所以还要手动添加一下摄像头的权限.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ricky.qrcodesanner"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.front"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="false" />
<uses-feature android:name="android.hardware.screen.landscape" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"