二维码扫描--基于bingoogolapple + Android Studio 2.3.3

来源:互联网 发布:视频大数据什么意思 编辑:程序博客网 时间:2024/06/05 12:06

前言:

Android开发之实现二维码扫描

正文:

网上有很多的二维码扫描的教程,但,对于刚入门的兄弟们来说,真的很残忍。

既然有需求,就去网上找相应的教程是吧,而且,就喜欢那种简单粗暴的先实现下功能,再进行代码的改动,达到自己的需求。

嗯,我只是刚入门的小学生。

扫描二维码,当然是官方的Zxing库了,这个是必须要学习的。
但是,如果只是实现功能练下手,咱就接着往下看。

bingoogolapple在功能实现上就是很简洁的一个基于zxing的库。
本文就此展开。

1. 首先,在Model的build.gradel中添加如下代码:

dependencies {    //添加如下代码    compile 'com.google.zxing:core:3.2.1'    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'    compile 'cn.bingoogolapple:bga-zxing:1.1.3@aar'}

2. 配置AndroidManifest.xml

    <!-- 扫码 -->    <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.FLASHLIGHT" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3. 新建ScanCodeActivity

public class ScanCodeActivity extends Activity implements QRCodeView.Delegate {    private static final int REQUEST_CODE_CAMERA = 999;    private static final String TAG = ScanCodeActivity.class.getSimpleName();    private QRCodeView mQRCodeView;    private String scanResult;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_scan_code);        mQRCodeView = (ZXingView) findViewById(R.id.zxingview);        mQRCodeView.setDelegate(this);        Log.e(TAG, "扫码:01");    }    @Override    protected void onStart() {        super.onStart();        mQRCodeView.startCamera();//        mQRCodeView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT);        mQRCodeView.startSpot();        Log.e(TAG, "扫码:02");    }    @Override    protected void onStop() {        mQRCodeView.stopCamera();        super.onStop();        Log.e(TAG, "扫码:03");    }    @Override    protected void onDestroy() {        mQRCodeView.onDestroy();        super.onDestroy();        Log.e(TAG, "扫码:04");    }    //震动器    private void vibrate() {        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);        vibrator.vibrate(100);        Log.e(TAG, "扫码:05");    }    @Override    public void onScanQRCodeSuccess(String result) {        scanResult = result;        Log.i(TAG, "result:" + result);        //Toast.makeText(this, result, Toast.LENGTH_SHORT).show();        vibrate();//震动        mQRCodeView.stopSpot();        if (!TextUtils.isEmpty(result)) {            mQRCodeView.stopCamera();            mQRCodeView.onDestroy();            new Handler().postDelayed(new Runnable() {  //开启线程阻塞,以便查看是否登录成功。做调试用                public void run() {                    // TODO Auto-generated method stub                }            }, 10000);            Intent intent = new Intent(ScanCodeActivity.this, showMessage.class);            intent.putExtra("url", result);            //intent.setData(Uri.parse(result));            startActivity(intent);            finish();        } else {            Toast.makeText(this, "链接无效,请重新扫描", Toast.LENGTH_SHORT).show();            mQRCodeView.startSpot();        }        Log.e(TAG, "扫码:06");    }    @Override    public void onScanQRCodeOpenCameraError() {        Log.e(TAG, "无相机权限,打开相机出错");        ActivityCompat.requestPermissions(this,                new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA);        Log.e(TAG, "扫码:07");    }    public void onClick(View v) {        switch (v.getId()) {            case R.id.start_spot:                mQRCodeView.startSpot();                break;            case R.id.stop_spot:                mQRCodeView.stopSpot();                break;            case R.id.open_flashlight:                mQRCodeView.openFlashlight();                break;            case R.id.close_flashlight:                mQRCodeView.closeFlashlight();                break;            case R.id.rl_back:                //onDestroy();                mQRCodeView.stopCamera();                mQRCodeView.onDestroy();                finish();                break;        }    }    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        if (requestCode == REQUEST_CODE_CAMERA) {            mQRCodeView.startCamera();            mQRCodeView.startSpot();        }    }}

布局文件如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout style="@style/MatchMatch"    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <cn.bingoogolapple.qrcode.zxing.ZXingView        android:id="@+id/zxingview"        style="@style/MatchMatch"        app:qrcv_animTime="2000"        app:qrcv_barCodeTipText="将条码放入框内,即可自动扫描"        app:qrcv_borderColor="@android:color/white"        app:qrcv_borderSize="1dp"        app:qrcv_cornerColor="#f57257"        app:qrcv_cornerLength="20dp"        app:qrcv_cornerSize="3dp"        app:qrcv_isBarcode="false"        app:qrcv_isOnlyDecodeScanBoxArea="true"        app:qrcv_isScanLineReverse="true"        app:qrcv_isShowDefaultGridScanLineDrawable="true"        app:qrcv_isShowDefaultScanLineDrawable="false"        app:qrcv_isShowTipBackground="true"        app:qrcv_isShowTipTextAsSingleLine="false"        app:qrcv_isTipTextBelowRect="false"        app:qrcv_maskColor="#33FFFFFF"        app:qrcv_qrCodeTipText="将二维码放入框内,即可自动扫描"        app:qrcv_rectWidth="200dp"        app:qrcv_scanLineColor="#f57257"        app:qrcv_scanLineMargin="0dp"        app:qrcv_scanLineSize="1dp"        app:qrcv_tipTextColor="@android:color/white"        app:qrcv_tipTextSize="12sp"        app:qrcv_toolbarHeight="0dp"        app:qrcv_topOffset="180dp"/>    <LinearLayout        style="@style/MatchWrap.Vertical"        android:layout_alignParentBottom="true"        android:layout_marginBottom="50dp">        <LinearLayout style="@style/MatchWrap.Horizontal">            <TextView                android:id="@+id/start_spot"                style="@style/AutoWrapTv"                android:text="开始识别"                android:visibility="gone"/>            <TextView                android:id="@+id/stop_spot"                style="@style/AutoWrapTv"                android:text="暂停识别"                android:visibility="gone"/>            <TextView                android:id="@+id/open_flashlight"                style="@style/AutoWrapTv"                android:text="开灯"/>            <TextView                android:id="@+id/close_flashlight"                style="@style/AutoWrapTv"                android:text="关灯"/>        </LinearLayout>    </LinearLayout>    <RelativeLayout        android:id="@+id/rl_back"        android:layout_width="60dp"        android:layout_height="60dp"        android:layout_marginTop="30dp"        android:onClick="onClick"        android:layout_marginLeft="10dp">    </RelativeLayout>    <TextView        android:id="@+id/text"        android:layout_height="match_parent"        android:layout_width="match_parent"        /></RelativeLayout>

4. 新建showMessage(扫码成功后的跳转Activity)

public class showMessage extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_show_message);        Intent intent = getIntent();        String str = intent.getStringExtra("url");        Toast.makeText(this, str,Toast.LENGTH_SHORT).show();    }}
阅读全文
0 0
原创粉丝点击