android利用ZXing掃描二維碼

此項目源碼地址:請點擊這裏
這裏寫圖片描述

看一下zxing的項目結構,我這裏直接拿過來用的
這裏寫圖片描述
看一下掃碼的activity:

package com.fanyafeng.barcode.activity;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.fanyafeng.barcode.R;
import com.fanyafeng.barcode.BaseActivity;
import com.fanyafeng.barcode.util.ImageUtil;
import com.fanyafeng.barcode.zxing.activity.CaptureActivity;
import com.fanyafeng.barcode.zxing.activity.CodeUtils;

//需要搭配baseactivity,這裏默認爲baseactivity,並且默認Baseactivity爲包名的根目錄
public class ScanCodeActivity extends BaseActivity {
    /**
     * 掃描跳轉Activity RequestCode
     */
    public static final int REQUEST_CODE = 111;
    /**
     * 選擇系統圖片Request Code
     */
    public static final int REQUEST_IMAGE = 112;
    /**
     * 請求CAMERA權限碼
     */
    public static final int REQUEST_CAMERA_PERM = 101;

    private TextView tvResult;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_code);
//這裏默認使用的是toolbar的左上角標題,如果需要使用的標題爲中心的採用下方註釋的代碼,將此註釋掉即可
        title = getString(R.string.title_activity_scan_code);

        initView();
        initData();
    }


    //初始化UI空間
    private void initView() {
        tvResult = (TextView) findViewById(R.id.tvResult);
    }

    //初始化數據
    private void initData() {


    }

    @Override
    public void onClick(View v) {
        super.onClick(v);
        switch (v.getId()) {
            case R.id.btnScan:
                Intent intent = new Intent(getApplication(), CaptureActivity.class);
                startActivityForResult(intent, REQUEST_CODE);

//                本地掃描,識別相冊中的二維碼
//                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//                intent.addCategory(Intent.CATEGORY_OPENABLE);
//                intent.setType("image/*");
//                startActivityForResult(intent, REQUEST_IMAGE);
                break;
        }
    }

    @Override
    protected void onActivityResult(final int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        /**
         * 處理二維碼掃描結果
         */
        if (requestCode == REQUEST_CODE) {
            //處理掃描結果(在界面上顯示)
            if (null != data) {
                Bundle bundle = data.getExtras();
                if (bundle == null) {
                    return;
                }
                if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    String result = bundle.getString(CodeUtils.RESULT_STRING);
                    Toast.makeText(this, "解析結果:" + result, Toast.LENGTH_LONG).show();
                    tvResult.setText(result);
                } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
                    Toast.makeText(ScanCodeActivity.this, "解析二維碼失敗", Toast.LENGTH_LONG).show();
                }
            }
        }

        /**
         * 選擇系統圖片並解析
         */
        else if (requestCode == REQUEST_IMAGE) {
            if (data != null) {
                Uri uri = data.getData();
                try {
                    CodeUtils.analyzeBitmap(ImageUtil.getImageAbsolutePath(this, uri), new CodeUtils.AnalyzeCallback() {
                        @Override
                        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                            Toast.makeText(ScanCodeActivity.this, "解析結果:" + result, Toast.LENGTH_LONG).show();
                            tvResult.setText(result);
                        }

                        @Override
                        public void onAnalyzeFailed() {
                            Toast.makeText(ScanCodeActivity.this, "解析二維碼失敗", Toast.LENGTH_LONG).show();
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } else if (requestCode == REQUEST_CAMERA_PERM) {
            Toast.makeText(this, "從設置頁面返回...", Toast.LENGTH_SHORT).show();
        }
    }
}

註釋中有本地二維碼的識別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章