Android Studio使用zxing库扫描并解析条形码
来源:互联网 发布:if you中文网络歌手 编辑:程序博客网 时间:2024/06/05 11:03
首先导入zxing库,打开app下的build.gradle位置如下。
打开后在如下位置后,在dependencies中
添加划线的那行代码,即:
compile 'com.journeyapps:zxing-android-embedded:3.5.0'
解析条形码
1.在xml中写入控件,我这里是一个TextView用来接收返回的ISBN码和一个Button用来触发扫码事件
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:paddingTop="10dp" android:paddingLeft="30dp" android:textSize="25dp" android:id="@+id/isbn"/><Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="20dp" android:layout_alignParentRight="true" android:text="扫一扫" />
2.在对应的Activity中写入代码,比如为MainActivity,为button注册一个监听,利用zxing中的类IntentIntegrator来设置属性,主要代码:
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { IntentIntegrator integrator = new IntentIntegrator(getActivity()); // 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码 integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES); integrator.setCaptureActivity(ScanActivity.class); //设置打开摄像头的Activity integrator.setPrompt("请扫描ISBN"); //底部的提示文字,设为""可以置空 integrator.setCameraId(0); //前置或者后置摄像头 integrator.setBeepEnabled(true); //扫描成功的「哔哔」声,默认开启 integrator.setBarcodeImageEnabled(true); integrator.initiateScan(); }});
3.再新建一个Activity,这个Activity是用来打开摄像头的。我这里的名字叫ScanActivity,主要代码:
public class ScanActivity extends CaptureActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }}
4.在MainActivity中写入如下代码,接收扫码后返回的值。其中result为获取的值,我这里将它显示到textview中。主要代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (scanResult != null) { String result = scanResult.getContents();isbn.setText(result); }}
生成条形码
1.在xml中写入控件,我这里是一个EditView用来输入一个字符串,一个Button用来触发生成条形码事件,还有一个ImageView来显示生成的条形码
<EditText android:layout_width="250dp" android:layout_height="wrap_content" android:text="" android:paddingTop="10dp" android:paddingLeft="30dp" android:textSize="25dp" android:id="@+id/text"/><Button android:id="@+id/create" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="20dp" android:layout_alignParentRight="true" android:text="生成" /><ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image" android:layout_gravity="center" android:layout_marginTop="50dp"/>
2.在对应的Activity中写入代码,比如为MainActivity,为button注册一个监听,将获取到的字符串转成Bitmap格式图片设置到ImageView中,主要代码:
@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); image=(ImageView)getActivity().findViewById(R.id.image); text=(TextView) getActivity().findViewById(R.id.text); btn=(Button) getActivity().findViewById(R.id.create); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { test=text.getText().toString(); Bitmap a=encodeAsBitmap(test); image.setImageBitmap(a); } });}Bitmap encodeAsBitmap(String str) { Bitmap bitmap = null; BitMatrix result = null; MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); try { //查看各参数解析 result = multiFormatWriter.encode(str, BarcodeFormat.CODE_128, 800, 300); // 使用 ZXing Android Embedded 要写的代码 BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); bitmap = barcodeEncoder.createBitmap(result); } catch (WriterException e) { e.printStackTrace(); } catch (IllegalArgumentException iae) { return null; } return bitmap;}
其中BarcodeFormat有各种属性,下边是一些属性的含义,这里我用的是Code 128
UPC-A是一种国际通用的编码格式,由12个数字构成,EAN-13是在UPC-A基础上的一种扩充(多了一个数字)。
Code39或者Code 128的Barcode,那么这很就可能是一个快递编码
QRCode,就是我们经常用手机扫一扫的二维码
我写了一个小demo,
GitHub地址:
https://github.com/satanmeng/Tomcat
其中演示效果:
我用了一个别人写bottomBar的插件
compile 'com.roughike:bottom-bar:2.3.1'
将解析条形码放在了第一个页面(对应的xml-fragment1.xml Activity-fragmentone.java),生成条形码放在了第二页面(对应的xml-fragment2.xml Activity-fragmenttwo.java)
其中有一个疑惑,解析条形码返回的结果是在MainActivity中,而我要将这个结果写到碎片中的TextView中,我用了网上的方法用
LayoutInflater.from(MainActivity.this).inflate(R.layout.fragment1,null);
获取到碎片对应的view在找TextView也不行,最后我在fragmentone.java写了一个静态方法:
public static void settext(String result){ isbn.setText(result);}
用来将结果写到TextView中;
- Android Studio使用zxing库扫描并解析条形码
- 使用zxing支持条形码扫描
- 在Android中使用 Google ZXing 实现二维码、条形码扫描
- 在Android中使用 Google ZXing 实现二维码、条形码扫描
- 【android】二维码、条形码扫描——使用Google ZXing
- Android 系列 5.7使用Google ZXing条形码扫描器扫描条形码或QR码
- Android ZXing 二维码、条形码扫描介绍
- Android ZXing 二维码、条形码扫描介绍
- Android ZXing 二维码、条形码扫描介绍
- Android ZXing 二维码、条形码扫描介绍
- Android ZXing 二维码、条形码扫描介绍
- Android ZXing 二维码、条形码扫描介绍
- 使用ZXing扫描条形码和二维码
- 使用ZXing扫描多个二维码,条形码
- zxing扫描条形码 ios
- zxing扫描条形码 ios
- IOS zXing 扫描条形码
- Android使用zxing扫描
- ccf-csp 2016-12-02 计算工资
- 倒计时
- ListView中按钮监听器 设置 及 优化
- 十.ARM裸机学习之中断系统2(S5PV210按键外部中断及中断处理)
- My Templet
- Android Studio使用zxing库扫描并解析条形码
- SQL Server 添加主外键约束命令
- WebGL入门系列二
- mysql主从复制实验
- Java基础之运算符
- algo_FISTA(fast shrinkage-thresholding algorithm)
- matlab常用快捷键
- 教你如何绕过百度客戶端快速下載百度云盘的电影等文件,仅适应MAC OSx
- jedis源码分析和使用