RFID+二维码扫描

很久没有更新博客了,前一段时间对之前的RFID扫描APP做了一次更新,加入了扫描二维码的功能,界面也做了相应的变动,如图。
主界面:

扫描二维码界面:

接下来分三个部分描述此次改动,1.第三方库文件。2.如何将第三方库文件整合到自己的项目中。3.对第三方库文件的一些改动。

  1. 第三方库文件——大神对Zxing项目的剪裁,BarCodeTest
    这个库文件是对GitHub上的Zxing项目的剪裁,去掉了一些用不到的功能,只保留了QR码的二维码解码方式,不过一般情况下足够使用。网上有很多地方提供这个项目的下载,或者可以留言邮箱我发送给你。其中Zxing的目录下共有5个子目录:activity,camera,decoding,encoding,view。其中activity是扫描界面的部分,可以在此修改扫描界面的显示和控件的监控。view是自定义的二维码图片捕捉的控件,可以在此修改那个控件的大小和显示效果。
  2. 整合
    这部分可以参考http://www.cnblogs.com/neozhu/p/3458759.html这篇文章,着重说一点,由于Android Studio是通过Gradle编译的,所以必须在BarCodeTest中加入build.gradle文件,这个文件的具体内容跟自己的项目有关,最主要的是一些参数的设置,可以参考我这个。
buildscript { repositories { mavenCentral() }

    dependencies { classpath 'com.android.tools.build:gradle:1.5.0' }

}

apply plugin: 'com.android.library'



repositories { mavenCentral() }



android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 15 targetSdkVersion 23 }





    sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] renderscript.srcDirs = ['src'] }

    }

}



dependencies { compile 'com.android.support:appcompat-v7:23.1.1' compile files('libs/zxing.jar') }

3 . 对库文件的修改

  1. 实现连续扫描
    项目默认的扫描方式是单次扫描,对其中部分代码进行改动,实现连续扫描。
// 连续扫描的设置
    private Handler mHandler;
    ...
// 初始化Handler和Task
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    continuePreview();
                }
            }
        };

public void handleDecode(Result result, Bitmap barcode) {
// 定时重新扫描
        Message msg = new Message();
        msg.what = 1;
        mHandler.sendMessageDelayed(msg, 1000);
}
/* * 连续扫描 */
 private void continuePreview(){
        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
        SurfaceHolder surfaceHolder = surfaceView.getHolder();
        initCamera(surfaceHolder);
        if (handler != null){
            handler.restartPreviewAndDecode();
        }
}

注意,hander.restartPreviewAndDecode()是私有方法,需要将其改为public
2. 库文件中二维码扫描activity和原app的参数传递
由于项目需要,必须实现点开二维码扫描后实现连续扫描并将结果进行处理,这就使得使用startActivityForResult的方式行不通,最后决定使用广播来解决这个问题,具体代码如下:
二维码扫描部分:

public void handleDecode(Result result, Bitmap barcode) {
if (resultString.equals("")) {
            Toast.makeText(CaptureActivity.this, "Scan failed!", Toast.LENGTH_SHORT).show();
        }else {
            // 发送广播
            Intent i = new Intent(Broadcast);
            i.putExtra("cld", resultString);
            sendBroadcast(i);
        }
}

原app接收部分:

// Broadcast接收
        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String cldstr = intent.getExtras().getString("cld");
                CLD cld = CLDLab.getCLDLab(getApplicationContext()).addCLD(cldstr, mActionstr);
                mListAdapter.notifyDataSetChanged();
                Httpthread thread = new Httpthread(cld);
                thread.start();
            }
        };
        IntentFilter filter = new IntentFilter(Broadcast);
        registerReceiver(receiver, filter);

你可能感兴趣的:(zxing,二维码,RFID,BarCodeTes)