江南以北 2015-09-22
这里主要介绍一款控件 zxing-android-embedded 。
直接使用 ZXing 当然也不是不可以,甚至zxing现在也提供了android-integration,但是需要用户下载zxing的安卓应用,而该应用功能又有些冗余,于是很多blog都提供了一些精简的步骤,但是,一定程度上增加了开发负担,此时正是 zxing-android-embedded 派的上用场的时候。
建议先下载该控件的demo,运行后有个直观的感受,如果demo里面的例子已经满足个人的需求,直接把对应的activity加到自己的工程即可,比如提供的 CustomScannerActivity.java 就是一个正方形的竖屏的扫码框,在 AndroidManifest.xml 中添加
<activity android:name=".CustomScannerActivity" android:screenOrientation="fullSensor" android:stateNotNeeded="true" android:theme="@style/zxing_CaptureTheme" android:windowSoftInputMode="stateAlwaysHidden"> </activity>
在需要使用扫码的activity中初始化,并调用
IntentIntegrator integrator = new IntentIntegrator(this); //是否播放提示音 integrator.setBeepEnabled(true); //是否保留扫码成功时候的截图 //integrator.setBarcodeImageEnabled(true); //调用 integrator.setCaptureActivity(CustomScannerActivity.class).initiateScan();
设置扫码结果的回调
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { Toast.makeText(this, "您取消了扫描", Toast.LENGTH_LONG).show(); } else { //二维码的实际内容 String content = result.getContents(); //如果你在调用扫码的时候setBarcodeImageEnabled(true) //通过下面的方法获取截图的路径 String imgPath = result.getBarcodeImagePath(); } } else { Log.d(TAG, "Weird"); super.onActivityResult(requestCode, resultCode, data); } }
以下主要介绍如何定制化扫码框,比如添加四个直角:
比较好的做法是通过Android Studio将下载的 zxing-android-embedded 作为module加入到工程中,在主module中添加gradle依赖
compile(project(':zxing-android-embedded')) { transitive = true }