Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之二維碼的掃描與生成

Android之二維碼的掃描與生成

編輯:關於Android編程

今天,來學習使用怎麼實現二維碼的掃一掃和二維碼的生成。

要想實現二維碼的掃一掃與二維碼的生成,就得必須了解二維碼的特征。

QRcode:

QRCode簡介:

QRCode全稱Quick Response Code。通過在一個矩形區域內使用黑白像素來進行編碼。高糾錯性、高可用性、高識別性。

ZXing簡介:

ZXing是一個開放源碼的,用java實現的多種格式為1D/2D條碼圖形處理庫,它包含了聯系到其他語言的端口。ZXing可以實現使用手機的內置的攝像頭完成條形碼的掃描與解碼。

ZXing項目地址:

http://github.com/zxing/zxing
ZXing項目的源代碼特別大,有120多M。ZXing的功能特別強大,它不僅對掃描二維碼,它還可以掃描其他的編碼。同時它不僅在Android上可以使用,還可以在其他平台,比如Java SE、JavaScript等眾多平台上使用。這樣一個龐大的源代碼我們很難對它進行使用,所以我們必須對這個源代碼進行精簡。將我們所需要的編碼、解碼功能提取出來。 因此,互聯網上有許多大神已經將ZXing中關於對Android的掃描的編碼與解碼已經提出來了。已經成為了第三方類庫,提供我們使用。

掃一掃——解析二維碼:

我們將掃一掃第三方類庫引入到我們的工程空間,並創建我們掃一掃的Demo工程。 \ 源碼實現: 布局文件:activity_main.xml

MainActivity.java
package com.xbmu.scan;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.xys.libzxing.zxing.activity.CaptureActivity;

public class MainActivity extends Activity {
    private TextView tvResult;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvResult  = (TextView) findViewById(R.id.tv_result);

    }

    /**
     * 點擊掃一掃按鈕,開啟掃描二維碼
     * @param view
     */
    public void startScan(View view){
        //跳轉到掃一掃
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class),0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
            Bundle bundle = data.getExtras();
            String result = bundle.getString("result");
            tvResult.setText(result);
        }
    }
}
其中:String result = bundle.getString("result");這句代碼中的"result",可以根據閱讀掃一掃源碼得知: \
到此,就實現了掃描二維碼的功能。 我們可以通過這個網站(http://cli.im/)生成二維碼: \ 將此Demo安裝到我們的手機上,即可掃描該二維碼。 運行效果: \ \

生成二維碼:

不帶logo的二維碼:

布局文件:activity_main.xml

MainActivity.java
package com.xbmu.scan;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;

public class MainActivity extends Activity {
    private TextView tvResult;
    private EditText etInputText;
    private ImageView ivResult;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvResult  = (TextView) findViewById(R.id.tv_result);
        etInputText = (EditText) findViewById(R.id.et_input_text);
        ivResult = (ImageView) findViewById(R.id.iv_result);

    }

    /**
     * 點擊掃一掃按鈕,開啟掃描二維碼
     * @param view
     */
    public void startScan(View view){
        //跳轉到掃一掃
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class),0);
    }

    /**
     * 生成二維碼
     * @param view
     */
    public void makeQRCode(View view){
        String inputText = etInputText.getText().toString();
        if(inputText.equals("")){
            Toast.makeText(MainActivity.this,"輸入的文本不能為空",0).show();
        }else{
            Bitmap bitmap = EncodingUtils.createQRCode(inputText, 500, 500, null);
            ivResult.setImageBitmap(bitmap);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
            Bundle bundle = data.getExtras();
            String result = bundle.getString("result");
            tvResult.setText(result);
        }
    }
}
運行效果:
\

帶logo的二維碼:

布局文件activity_main.xml

MainActivity.java
package com.xbmu.scan;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;

public class MainActivity extends Activity {
    private TextView tvResult;
    private EditText etInputText;
    private ImageView ivResult;
    private CheckBox cbSelect;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvResult  = (TextView) findViewById(R.id.tv_result);
        etInputText = (EditText) findViewById(R.id.et_input_text);
        ivResult = (ImageView) findViewById(R.id.iv_result);
        cbSelect = (CheckBox) findViewById(R.id.cb_select);
    }

    /**
     * 點擊掃一掃按鈕,開啟掃描二維碼
     * @param view
     */
    public void startScan(View view){
        //跳轉到掃一掃
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class),0);
    }

    /**
     * 生成二維碼
     * @param view
     */
    public void makeQRCode(View view){
        String inputText = etInputText.getText().toString();
        if(inputText.equals("")){
            Toast.makeText(MainActivity.this,"輸入的文本不能為空",Toast.LENGTH_SHORT).show();
        }else{
            Bitmap bitmap = EncodingUtils.createQRCode(inputText, 500, 500,
                    cbSelect.isChecked() ?
                            BitmapFactory.decodeResource(getResources(),R.drawable.xiaomao) :
                            null);
            ivResult.setImageBitmap(bitmap);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
            Bundle bundle = data.getExtras();
            String result = bundle.getString("result");
            tvResult.setText(result);
        }
    }
}
運行效果: \

到此為止,已經順利的實習了二維碼的掃描與生成。 感謝慕課網,提供的教學視頻,不斷學習,提高自己。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved