项目需要用到扫描条形码,所以找了下zxing,太久没用,重新过了一遍集成,
github:zxing 地址
进入github,我是直接download整个项目,然后完整目录,再在工程中,以module的形式导入目录下的android工程,
导入之后,android这个有几个地方需要注意修改的,也可以根据提示修改:
1、将gradle中的各种sdk与主工程保持一致
2、修改gradle中的apply plugin为com.android.library
3、将applicationId屏蔽或者删除
4、添加代码依赖
dependencies{
api 'com.google.zxing:android-core:3.3.0'
api 'com.google.zxing:core:3.3.2'
}
5、manifest配置文件中注意将application中的icon,logo,lable等去掉,同时找到CaptureActivity,屏蔽去除其中的代码
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN"/>-->
<!-- <category android:name="android.intent.category.LAUNCHER"/>-->
<!-- </intent-filter>-->
因为此activity是android工程的入口,现在作为一个库,不需要此代码
6、代码内的switch case 代码需要替换成if else,从git下载时,如果还没修改这个,可能会在调用的地方报错,case R.id.XXX之类
7、我导入zxing这个项目时,有个类(HistoryItemAdapter)报构造函数错误,也给改了下,可以注意下,修改后代码如下:
public HistoryItemAdapter(Context activity, int resource, List<HistoryItem> objects) {
super(activity, R.layout.history_list_item, new ArrayList<HistoryItem>());
this.activity = activity;
}
调用的地方也需要对应修改下:
adapter = new HistoryItemAdapter(this,0,null);
自此,配置上基本时修改完成了,可以调用了,但是这个源库中,界面有一些不必要的,以及业务可以屏蔽去除,目前android源程序是打开后就是扫描界面,扫描后显示结果在同一个activity上,结果view是默认隐藏的,
我现在的需求是app内调用CaptureActivity扫描,返回扫描条形码结果给app内的activity,所以我将源程序中的界面,回调进行了一些更改屏蔽,更改后的调用如下:
public void toScan(View view){
//打开扫描界面扫描条形码或二维码
Intent intent = new Intent(this, CaptureActivity.class);
startActivityForResult(intent, 9);
}
结果处理:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 9) {
if (data != null) {
String string=data.getStringExtra(Intents.Scan.RESULT);//条形码
Log.e("返回扫描结果",string);
}
}
}
修改后的源程序已经上传到csdn,审核中,有需要的可以下载看看,少花一些时间,然后再根据自己需求做更改。