2015年11月12日 星期四

使用 ZXING 進行條碼(1~2維) 掃描

這個議題在網路上的範例相當多,但是我也花了許多功夫,才找到可執行的範例,特紀錄如下。

1. 使用 Android Studio 1.4
2. New 一個 Empty Activity的 project
3. 參考 http://lazycatnote.blogspot.tw/2015/03/androidqr-code.html 的說明,但是加的位置及內容略為調整。
 (a) 在 Gradle Scripts / build gradle (Module: app) 加入程式碼:

repositories {
    mavenCentral()

    maven {
        url "http://dl.bintray.com/journeyapps/maven"    }
}

dependencies {
    // Supports Android 4.0.3 and later (API level 15)    compile 'com.journeyapps:zxing-android-embedded:2.0.1@aar'
    // Supports Android 2.1 and later (API level 7), but not optimal for later Android versions.    // If you only plan on supporting Android 4.0.3 and up, you don't need to include this.    compile 'com.journeyapps:zxing-android-legacy:2.0.1@aar'
    // Convenience library to launch the scanning and encoding Activities.    // It automatically picks the best scanning library from the above two, depending on the    // Android version and what is available.    compile 'com.journeyapps:zxing-android-integration:2.0.1@aar'
    // Version 3.0.x of zxing core contains some code that is not compatible on Android 2.2 and earlier.    // This mostly affects encoding, but you should test if you plan to support these versions.    // Older versions e.g. 2.2 may also work if you need support for older Android versions.    compile 'com.google.zxing:core:3.0.1'}

當出現需要 Sync的訊息時,按下 Sync now (此時會自動下載相關檔案,無需自行下載 ZXING 套件)

(b) MainActivity 內容

package com.example.ray.myapplication2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import com.google.zxing.integration.android.*;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    private Activity mainactivity;
    private TextView scan_content;
    private TextView scan_format;
    private Button scan_btn;
    @Override    protected void onCreate(Bundle saveInstanceStat){
        super.onCreate(saveInstanceStat);
        setContentView(R.layout.activity_main);
        init_view();
        scan_btn.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                IntentIntegrator scanIntegrator = new IntentIntegrator(mainactivity);
                scanIntegrator.initiateScan();
            }
        });
    }
    public void onActivityResult(int requestCode, int resultCode, Intent intent){
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
        if(scanningResult!=null){
            String scanContent=scanningResult.getContents();
            String scanFormat=scanningResult.getFormatName();
            scan_content.setText(scanContent);
            scan_format.setText(scanFormat);
        }else{
            Toast.makeText(getApplicationContext(),"nothing",Toast.LENGTH_SHORT).show();
        }
    }
    private void init_view(){
        this.scan_content=(TextView)findViewById(R.id.scan_content);
        this.scan_format=(TextView)findViewById(R.id.scan_format);
        this.mainactivity=this;
        this.scan_btn = (Button)findViewById(R.id.scan_btn);
    }
}

(c) active_main.xml 加入相對的Button及Textview


4. 完工

5. 範例下載: https://drive.google.com/file/d/0B1BLJ4r7axiQczVIVGhySy1uRGs/view?usp=sharing

沒有留言:

張貼留言