RFID+二维码扫描

来源:互联网 发布:oracle数据库试题 编辑:程序博客网 时间:2024/05/18 13:24

很久没有更新博客了,前一段时间对之前的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);
0 0
原创粉丝点击