開發Android二維碼掃描功能

jopen 10年前發布 | 44K 次閱讀 Android Android開發 移動開發

 

二維碼開發主要依賴ZXing開源項目

項目地址:https://github.com/zxing/zxing

這個開源項目可以掃描一維,和二維碼,

一維碼指的是書后面的條形碼

首先配置ZXing庫和Android工程

項目本身非常大,我們只需使用精簡版的庫

導入之后

Android二維碼掃描功能的集成開發

Android二維碼掃描功能的集成開發

TestQRcode 項目作為庫被其他項目使用。

BarCodeTestActivity

package com.ericssonlabs;
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class BarCodeTestActivity extends Activity {
  /** Called when the activity is first created. */
  private TextView resultTextView;
  private EditText qrStrEditText;
  private ImageView qrImgImageView;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    resultTextView = (TextView) this.findViewById(R.id.tv_scan_result);
    qrStrEditText = (EditText) this.findViewById(R.id.et_qr_string);
    qrImgImageView = (ImageView) this.findViewById(R.id.iv_qr_image);
    Button scanBarCodeButton = (Button) this.findViewById(R.id.btn_scan_barcode);
    scanBarCodeButton.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        //打開掃描界面掃描條形碼或二維碼
        Intent openCameraIntent = new Intent(BarCodeTestActivity.this,CaptureActivity.class);
        startActivityForResult(openCameraIntent, 0);
      }
    });
    Button generateQRCodeButton = (Button) this.findViewById(R.id.btn_add_qrcode);
    generateQRCodeButton.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        try {
          String contentString = qrStrEditText.getText().toString();
          if (!contentString.equals("")) {
            //根據字符串生成二維碼圖片并顯示在界面上,第二個參數為圖片的大小(350*350)
            Bitmap qrCodeBitmap = EncodingHandler.createQRCode(contentString, 350);
            qrImgImageView.setImageBitmap(qrCodeBitmap);
          }else {
            Toast.makeText(BarCodeTestActivity.this, "Text can not be empty", Toast.LENGTH_SHORT).show();
          }
        } catch (WriterException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    });
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //處理掃描結果(在界面上顯示)
    if (resultCode == RESULT_OK) {
      Bundle bundle = data.getExtras();
      String scanResult = bundle.getString("result");
      resultTextView.setText(scanResult);
    }
  }
}

創建項目TestQRcode,來使用BarCodeTest庫

xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/container"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.jikexueyuan.testqrcode.MainActivity"
  tools:ignore="MergeRootFrame" >
  <Button
    android:id="@+id/scan"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="開始掃描二維碼" />
  <TextView 
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="show"
    />
   <EditText 
     android:id="@+id/input"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:hint="請輸入要編碼的內容"
     />
   <Button 
     android:id="@+id/gen"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="生成二維碼"
     />
   <ImageView 
     android:id="@+id/img"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="center_horizontal"
     />
</LinearLayout>

MainActivity
package com.jikexueyuan.testqrcode;
import junit.framework.Test;
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;
public class MainActivity extends Activity {
  private Button scanButton;
  private TextView text;
  private EditText input;
  private Button genButton;
  private ImageView img;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    scanButton = (Button) findViewById(R.id.scan);
    text = (TextView) findViewById(R.id.text);
    scanButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View arg0) {
        Toast.makeText(MainActivity.this, "你寫可以掃描條形碼或者二維碼",
            Toast.LENGTH_SHORT).show();
        Intent startScan = new Intent(MainActivity.this,
            CaptureActivity.class);
        // startActivity(startScan);
        startActivityForResult(startScan, 0);
      }
    });
    input = (EditText) findViewById(R.id.input);
    genButton = (Button) findViewById(R.id.gen);
    img = (ImageView) findViewById(R.id.img);
    genButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View arg0) {
        String in = input.getText().toString();
        if (in.equals("")) {
          Toast.makeText(MainActivity.this, "請輸入文本",
              Toast.LENGTH_SHORT).show();
        } else {
          try {
            Bitmap qrcode = EncodingHandler.createQRCode(in, 400);
            img.setImageBitmap(qrcode);
          } catch (WriterException e) {
            e.printStackTrace();
          }
        }
      }
    });
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
      String result = data.getExtras().getString("result");
      text.setText(result);
    }
  }
}

注冊CaptureActivity.java
<activity
  android:configChanges="orientation|keyboardHidden"
  android:name="com.zxing.activity.CaptureActivity"
  android:screenOrientation="portrait"
  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
  android:windowSoftInputMode="stateAlwaysHidden" >
</activity>

另外還要添加兩個權限,一個是振動,一個是照相機
<uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.VIBRATE"/>

下載地址:鏈接:http://pan.baidu.com/s/1uJVII 密碼:0uof

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!