二维码生成扫描

来源:互联网 发布:叮当在线客服软件 编辑:程序博客网 时间:2024/06/05 08:22

添加依赖:

compile 'com.google.zxing:core:3.1.0'compile 'cn.bingoogolapple:bga-qrcodecore:1.0.7@aar'compile 'cn.bingoogolapple:bga-zxing:1.0.7@aar'
注册文件:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>//调用相机<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.INTERNET"></uses-permission>//震动(用不到震动可以去掉)<uses-permission android:name="android.permission.VIBRATE" />//闪光灯(如不用闪光灯可以去掉)<uses-permission android:name="android.permission.FLASHLIGHT" />
<activity android:name=".ScanActivity"></activity><activity android:name=".GenerateActivity" />
布局:
activity_generate:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:gravity="center_horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent">    <EditText        android:layout_width="match_parent"        android:layout_height="48dp"        android:layout_margin="15dp"        android:id="@+id/et_input"        />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="48dp"        android:paddingLeft="15dp"        android:paddingRight="15dp"        android:layout_marginTop="15dp"        android:layout_marginBottom="15dp"        android:orientation="horizontal"        >        <TextView            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="48dp"            android:text="创建二维码"            android:textSize="22sp"            android:gravity="center"            android:textColor="@color/colorWrite"            android:background="@color/colorPrimary"            android:id="@+id/tv_create"            />        <TextView            android:layout_marginLeft="15dp"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="48dp"            android:text="创建logo二维码"            android:textSize="22sp"            android:gravity="center"            android:textColor="@color/colorWrite"            android:background="@color/colorPrimary"            android:id="@+id/tv_createlogo"            />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="200dp"        android:paddingLeft="15dp"        android:paddingRight="15dp"        android:layout_marginTop="15dp"        android:layout_marginBottom="15dp"        android:gravity="center"        android:orientation="horizontal"        >        <ImageView            android:layout_width="40dp"            android:layout_height="40dp"            android:src="@mipmap/logo"            android:scaleType="centerCrop"            android:id="@+id/iv_logo"            />        <ImageView            android:layout_marginLeft="40dp"            android:layout_width="160dp"            android:layout_height="160dp"            android:src="@mipmap/qr_m"            android:scaleType="centerCrop"            android:id="@+id/iv_qr"            />    </LinearLayout>    <TextView        android:layout_width="match_parent"        android:layout_height="48dp"        android:layout_margin="15dp"        android:text="识别"        android:textSize="22sp"        android:gravity="center"        android:textColor="@color/colorWrite"        android:background="@color/colorPrimary"        android:id="@+id/tv_read"        /></LinearLayout>
activity_scan:
<?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"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <cn.bingoogolapple.qrcode.zxing.ZXingView        android:id="@+id/zx_view"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:qrcv_animTime="1000"        app:qrcv_borderColor="@android:color/white"        app:qrcv_borderSize="1dp"        app:qrcv_cornerColor="@color/colorPrimaryDark"        app:qrcv_cornerLength="20dp"        app:qrcv_cornerSize="3dp"        app:qrcv_maskColor="#99000000"        app:qrcv_rectWidth="200dp"        app:qrcv_scanLineColor="@color/colorPrimaryDark"        app:qrcv_scanLineSize="1dp"        app:qrcv_topOffset="90dp" /></LinearLayout>
activity_mian:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context="baway.com.erweimademo.MainActivity">    <TextView        android:id="@+id/scan_qrcode"        android:layout_marginTop="15dp"        android:layout_width="match_parent"        android:layout_height="48dp"        android:background="@color/colorTransla"        android:textColor="@color/colorWrite"        android:textSize="20sp"        android:gravity="center"        android:text="扫描二维码" />    <TextView        android:id="@+id/generate_qrcode"        android:layout_marginTop="15dp"        android:layout_width="match_parent"        android:layout_height="48dp"        android:background="@color/colorTransla"        android:textColor="@color/colorWrite"        android:textSize="20sp"        android:gravity="center"        android:text="生成和识别图片二维码" /></LinearLayout>
MianActivity:
public class MainActivity extends Activity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.generate_qrcode).setOnClickListener(this);        findViewById(R.id.scan_qrcode).setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.scan_qrcode:                startActivity(new Intent(MainActivity.this,ScanActivity.class));                break;            case R.id.generate_qrcode:                startActivity(new Intent(MainActivity.this,GenerateActivity.class));                break;        }    }}
GenerateActivity:
public class GenerateActivity extends Activity implements View.OnClickListener {    private ImageView ivqr;    private TextView tvread;    private EditText etinput;    private TextView tvcreate;    private TextView tvcreatelogo;    private ImageView ivlogo;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_generate);        this.ivlogo = (ImageView) findViewById(R.id.iv_logo);        this.tvcreatelogo = (TextView) findViewById(R.id.tv_createlogo);        this.tvcreate = (TextView) findViewById(R.id.tv_create);        this.etinput = (EditText) findViewById(R.id.et_input);        this.tvread = (TextView) findViewById(R.id.tv_read);        this.ivqr = (ImageView) findViewById(R.id.iv_qr);        tvcreatelogo.setOnClickListener(this);        tvcreate.setOnClickListener(this);        tvread.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.tv_create:            //创建二维码                if(!checkIsEmpty())                    createQRCode();                else                    Toast.makeText(GenerateActivity.this, "输入框不能为空", Toast.LENGTH_SHORT).show();                break;            case R.id.tv_createlogo:       //创建带logo                if(!checkIsEmpty())                    createQRCodeWithLogo();                else                    Toast.makeText(GenerateActivity.this, "输入框不能为空", Toast.LENGTH_SHORT).show();                break;            case R.id.tv_read:      //识别                decodeQRCode();                break;        }    }    /**     * 校验输入框是否有内容     * 没有内容返回true,有内容返回false     * @return     */    private boolean checkIsEmpty(){        return TextUtils.isEmpty(etinput.getText().toString().trim());    }    /**     * 创建二维码     */    private void createQRCode() {        //生成二维码,第一个参数为要生成的文本,第二个参数为生成尺寸,第三个参数为生成回调        QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), new QRCodeEncoder.Delegate() {            /**             * 生成成功             * @param bitmap             */            @Override            public void onEncodeQRCodeSuccess(Bitmap bitmap) {                ivqr.setImageBitmap(bitmap);            }            /**             * 生成失败             */            @Override            public void onEncodeQRCodeFailure() {                Toast.makeText(GenerateActivity.this, "生成中文二维码失败", Toast.LENGTH_SHORT).show();            }        });    }    /**     * 创建带logo二维码     */    private void createQRCodeWithLogo() {        //生成二维码,第一个参数为要生成的文本,第二个参数为生成尺寸,第三个参数为生成二维码颜色,第四个参数为logo资源,第五个参数为生成回调        QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), Color.parseColor("#000000"), ((BitmapDrawable)ivlogo.getDrawable()).getBitmap(), new QRCodeEncoder.Delegate() {            @Override            public void onEncodeQRCodeSuccess(Bitmap bitmap) {                ivqr.setImageBitmap(bitmap);            }            @Override            public void onEncodeQRCodeFailure() {                Toast.makeText(GenerateActivity.this, "生成带logo的中文二维码失败", Toast.LENGTH_SHORT).show();            }        });    }    /**     * 解析     */    public void decodeQRCode() {        Bitmap bitmap = ((BitmapDrawable)ivqr.getDrawable()).getBitmap();        decode(bitmap, "解析二维码失败");    }    /**     * 解析二维码,可以解析二维码、带logo二维码、条形码     * @param bitmap     * @param err     */    private void decode(Bitmap bitmap, final String err) {        QRCodeDecoder.decodeQRCode(bitmap, new QRCodeDecoder.Delegate() {            @Override            public void onDecodeQRCodeSuccess(String result) {                Toast.makeText(GenerateActivity.this, result, Toast.LENGTH_SHORT).show();            }            @Override            public void onDecodeQRCodeFailure() {                Toast.makeText(GenerateActivity.this, err, Toast.LENGTH_SHORT).show();            }        });    }}
ScanActivity:
public class ScanActivity extends Activity implements QRCodeView.Delegate {    private QRCodeView mQR;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_scan);        mQR = (ZXingView) findViewById(R.id.zx_view);        //设置结果处理        mQR.setResultHandler(this);        //开始读取二维码    }    /**     * 扫描二维码方法大全(已知)     *     * mQR.startCamera();               开启预览,但是并未开始识别     * mQR.stopCamera();                停止预览,并且隐藏扫描框     * mQR.startSpot();                 开始识别二维码     * mQR.stopSpot();                  停止识别     * mQR.startSpotAndShowRect();      开始识别并显示扫描框     * mQR.stopSpotAndHiddenRect();     停止识别并隐藏扫描框     * mQR.showScanRect();              显示扫描框     * mQR.hiddenScanRect();            隐藏扫描框     * mQR.openFlashlight();            开启闪光灯     * mQR.closeFlashlight();           关闭闪光灯     *     * mQR.startSpotDelay(ms)           延迟ms毫秒后开始识别     */    /**     * 扫描二维码成功     * @param result     */    @Override    public void onScanQRCodeSuccess(String result) {        Toast.makeText(ScanActivity.this, result, Toast.LENGTH_SHORT).show();        //震动        vibrate();        //停止预览        mQR.stopCamera();    }    /**     * 打开相机出错     */    @Override    public void onScanQRCodeOpenCameraError() {        Toast.makeText(ScanActivity.this, "打开相机出错!请检查是否开启权限!", Toast.LENGTH_SHORT).show();    }    /**     * 震动     */    private void vibrate() {        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);        vibrator.vibrate(200);    }    @Override    protected void onStart() {        super.onStart();        //启动相机        mQR.startCamera();    }    @Override    protected void onStop() {        mQR.stopCamera();        super.onStop();    }}