1. 程式人生 > >QR Code 二維碼的生成與掃描

QR Code 二維碼的生成與掃描

前言

  現在大街小巷、各大網站都有二維碼的蹤跡,不管是IOS、Android、WP都有相關支援的軟體。
  最近因為工作需要使用相關技術,所以做了初步瞭解。今天主要是講述如何使用ZXing庫,在專案中要使用到二維碼的相關內容,百度(原諒我還在用)之後得知一半都是使用Google的開源庫 Zxing,但是網上多半的使用教程都是比較早的,這裡給出我總結的一些基礎程式碼和使用規則:

ZXing庫

1、ZXing庫介紹
 這裡簡單介紹一下ZXing庫。ZXing是一個開放原始碼的,用Java實現的多種格式的1D/2D條碼影象處理庫,它包含了聯絡到其他語言的埠。Zxing可以實現使用手機的內建的攝像頭完成條形碼的掃描及解碼。該專案可實現的條形碼編碼和解碼。目前支援以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39碼、93碼。ZXing是個很經典的條碼/二維碼識別的開源類庫,以前在功能機上,就有開發者使用J2ME運用ZXing了,不過要支援JSR-234規範(自動對焦)的手機才能發揮其威力。
2、ZXing庫主要類


 下面給大家介紹一下,ZXing庫裡面主要的類以及這些類的作用:

  • CaptureActivity。這個是啟動Activity 也就是掃描器。
  • CaptureActivityHandler 解碼處理類,負責呼叫另外的執行緒進行解碼。
  • DecodeThread 解碼的執行緒。
  • com.google.zxing.client.android.camera 包,攝像頭控制包。
  • ViewfinderView 自定義的View,就是我們看見的拍攝時中間的框框了。

這裡附上ZXing庫的官網下載地址:
ZXing官網下載地址

下載之後記得匯入自己需要的module中並新增到gradle檔案中!

那麼,問題是:
如何生成一個二維碼?

還是先把下載好的zxing庫匯入
這裡寫圖片描述

//還是來個頁面吧!!
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.qrcodescan.MainActivity">
<Button android:id="@+id/scan_code" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="掃描二維碼" android:textSize="30sp" /> <TextView android:textSize="40sp" android:id="@+id/scan_result" android:layout_width="match_parent" android:layout_height="150sp" /> <EditText android:id="@+id/code_messsage" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請填寫二維碼資訊" /> <Button android:id="@+id/make_code" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="生成二維碼" android:textSize="30sp" /> <ImageView android:id="@+id/codeimage" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>

效果圖
佈局的基本頁面

邏輯實現

//有了佈局,記得要把下載好的ZXing庫導進module中才能使用
//下面的都是精髓了<只能實現生成和掃描哦,因為我還沒有太大的使用需求!>
public class MainActivity extends AppCompatActivity {

    private Button codeScan;
    private TextView resultScan;
    private EditText codemesssage;
    private Button codeMake;
    private ImageView codeimage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();//獲取控制元件
        //生成二維碼
        codeMake.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //獲取輸入框輸入的資訊
                String message = codemesssage.getText().toString();
                //使用bitmap產生一個logo,當然,也可以不帶logo
                Bitmap logoBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                //param1 二維碼資訊  param2 寬   param3  高  param4  logo
                Bitmap qrCode = EncodingUtils.createQRCode(message, 600, 600, logoBitmap);
                //將生成的二維碼賦值給bitmap
                codeimage.setImageBitmap(qrCode);
            }
        });
        //掃描二維碼
        codeScan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //呼叫系統相機,掃描資訊
                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 == Activity.RESULT_OK) {//獲取到正確資訊
            Bundle bundle = data.getExtras();
            String result = bundle.getString("result");
            resultScan.setText(result);//給TextView賦值掃描到的資訊
        } else if (resultCode == RESULT_CANCELED) {//掃描失敗,提示
            Toast.makeText(MainActivity.this, "未掃描到資訊", Toast.LENGTH_SHORT).show();
        }
    }
    //獲取所有的控制元件
    private void initView() {
        codeScan = (Button) findViewById(R.id.scan_code);
        resultScan = (TextView) findViewById(R.id.scan_result);
        codemesssage = (EditText) findViewById(R.id.code_messsage);
        codeMake = (Button) findViewById(R.id.make_code);
        codeimage = (ImageView) findViewById(R.id.codeimage);
    }
}

這就完成了最基本的二維碼的操作!
感謝ZXing,讓我們不再勞累.

相關推薦

Android開發——Android中的生成掃描

0. 前言今天這篇文章主要描述二維碼的生成與掃描,使用目前流行的Zxing,為什麼要講二維碼,因為二維碼太普遍了,隨便一個Android APP都會有二維碼掃描。本篇旨在幫助有需求的同學快速完成二維碼生成和掃描的功能。本篇轉載自:http://blog.csdn.net/ha

iOS第三方生成掃描

匯入第三方框架libqrencode(生成二維碼)和ZBarSDK(二維碼掃描) 匯入標頭檔案 #import "QRCodeGenerator.h" #import "ZBarSDK.h" 建立兩個按鈕點選事件 點選按鈕一實現生成二維碼 - (I

QR Code 生成掃描

前言   現在大街小巷、各大網站都有二維碼的蹤跡,不管是IOS、Android、WP都有相關支援的軟體。   最近因為工作需要使用相關技術,所以做了初步瞭解。今天主要是講述如何使用ZXing庫,在專案中要使用到二維碼的相關內容,百度(原諒我還在用)之

QR code簡介及Qrencode庫的移植使用

現在生活中,二維碼可以說是無處不在,微信掃碼支付,支付寶掃碼支付,就連貼小廣告的都帶上了二維碼了。之前一直想去了解一下,還是太懶了,就沒去,現在專案中需要用到這東西,正好藉此機會瞭解一下。 上網一查,原來二維碼的還有很多種。下表是一個簡單的介紹: 二維碼的優點突出,

Java生成解碼工具Zxing使用

trace character sta 解碼 iter() font 生成 char type 1 package com.csii.zxing.test; 2 3 import java.awt.image.BufferedImage; 4 import j

Java生成解碼

添加 1.3 pin part 字符集 bit reader -- inpu 基於google zxing 的Java二維碼生成與解碼 一、添加Maven依賴(解碼時需要上傳二維碼圖片,所以需要依賴文件上傳包) <!-- google二維碼工具 --&g

微信帶場景引數的生成使用

應用場景:公眾號推廣時,使用者通過掃碼關注公眾號,需要統計使用者是通過誰的二維碼進行關注。 思路:在使用者掃碼關注公眾號時,二維碼帶上推廣者的id,在關注公眾號後,獲取到該推廣者的id。 目前有2種類型的二維碼: 1、臨時二維碼,是有過期時間的,最長可以設

Android 生成掃描,近距離識別優化,從相簿選擇識別

做了一個二維碼掃描圖片,主要是掃描不出來,看到一篇部落格,其中的第二種方法可以掃描到,在此做筆記,以備後用,前面的進入相簿,返回,到獲取圖片路徑方法都一樣; (1):二維碼生成的方法順便貼上: private Bitmap createQRImage(String url, final

玩轉Android之生成識別

二維碼,我們也稱作QRCode,QR表示quick response即快速響應,在很多App中我們都能見到二維碼的身影,最常見的莫過於微信了。那麼今天我們就來看看怎麼樣在我們自己的App中整合二維碼的掃描與生成功能。OK,廢話不多說,我們就開始做吧。二維碼的使用我主要想分為兩

生成讀取

一、通過Zxing生成與讀取: 生成二維碼: int width=300; int height=300; String format="png"; String conte

在android上實現生成掃描

先在androidstudio上匯入libzing的Module,然後再app上把那個libzing新增上去,這樣我們的app就關聯了那個libzing庫了 然後我們就只在app這個工程下寫程式碼就行了。activity_main.xml佈局如下

Android使用zxing-android-embedded(由zxing開發)實現生成掃描

前言: 目前二維碼(條形碼)的使用非常廣泛,所以啊,就想去實現以下嘛,最簡單的方法就是選擇開源庫了。 在網上一查開源庫還是很多的,介紹使用最多的就是zxing,所以這裡也就是用zxing了。但是由於zxing開源庫太大了,有很多不是Android要用的,所以

你不可錯過的生成解析-java後臺前端js都有

1.二維碼分類   二維條碼也有許多不同的碼制,就碼制的編碼原理而言,通常分為三種類型。 線性堆疊式二維碼 編碼原理: 建立在一維條碼基礎之上,按需要堆積成兩行或多行。 圖示: 矩陣式二維碼 最常用編碼,原理: 在一個矩形空間通過黑白畫素在矩陣中的不同分佈進行編碼。在

生成掃描、圖片識別(Zxing)

這樣的例子雖然已經很多了,不過我在網上瀏覽了一圈,也沒找到幾個相簿二維碼圖片識別例子,好的演算法識別率才高。這裡有一個好點的演算法,演算法不是我寫的,只是作為整理記錄,給眾多安卓開發者一個方便。demo的UI有點low,不過功能卻是實實在在,有需要的朋友可以自定義一些UI介

微信帶場景參數的生成使用功能實現?

mar 進入 分享 mage term 永久 擔心 type color 參數二維碼原理介紹:公眾號目前有2種類型的二維碼1、臨時二維碼,30天有效期2、永久二維碼,沒有失效時間 渠道二維碼生成(參數二維碼生成) 1、登錄微號幫 2、登錄後進入管理中心首頁選擇->功能

Qt:的解析/掃描(Zxing)生成(qrencode)

對Zxing和qrencode的封裝 解析/掃描部分底層為Zxing 生成部分底層為qrencode 注:我的開發環境是Qt5.5.0 效果圖: 掃描到以後: 程式碼這樣使用: Jas

掃描 生成

mainactivity.xml佈局 <?xml version="1.0" encoding="utf-8"?> <Button android:id="@+id/btnSan" android:layout_width="

掃描 生成

mainactivity.xml佈局 <?xml version="1.0" encoding="utf-8"?> <Button android:id="@+id/btnSan" android:layout_width="match_paren

andorid zxing的整合和掃描以及生成

二維碼掃描的功能,相信大家以及很熟悉了,但是如何整合呢?網上一搜,於是我們找的了這個開源庫:https://github.com/zxing/zxing 比較權威的一個開源庫,相信很多二維碼掃描核心程式

如何生成並統計掃描次數,展示頁面

引入了 phpqrcode 外掛來生成自定義二維碼 //建立空二維碼 唯一標識code public function mkCode() { // 引入外掛 include '/static/phpqrcode/phpqrcode.php'