zoukankan      html  css  js  c++  java
  • Android二维码扫描功能的集成开发

    二维码开发主要依赖ZXing开源项目

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

    这个开源项目可以扫描一维,和二维码,

    一维码指的是书后面的条形码

    首先配置ZXing库和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

  • 相关阅读:
    PHP页面跳转的几种方法
    PHP网站并发测试
    04-上传文件
    01-转>linux命令
    01-CDN的好处
    05-socket.io使用
    04-soket.io使用2 -数据同步简单聊天室效果
    03-socket.io 2.3.0版本的使用-用户请求接口,实时推送给前端数据
    02-转>
    跨域-转>预解析OPTIONS请求
  • 原文地址:https://www.cnblogs.com/six-moon/p/4643774.html
Copyright © 2011-2022 走看看