Android扫描二维码

       这里主要介绍一款控件 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 }

相关推荐