關於製作二維碼和掃一掃功能的實現
package com.example.project;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.lang.ref.WeakReference;
import cn.bingoogolapple.qrcode.zxing.QRCodeEncoder;
public class MainActivity extends AppCompatActivity {
private ImageView imageView; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { imageView = findViewById(R.id.image); editText = findViewById(R.id.edit_text); findViewById(R.id.select).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //檢查是否版本為6.0以上的 checkPermission(); } }); findViewById(R.id.sure).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { createQRCode(); } }); } //生成二維碼 private void createQRCode() { QRTask qrTask = new QRTask(this,imageView); qrTask.execute(editText.getText().toString()); } static class QRTask extends AsyncTask<String,Void,Bitmap> { private WeakReference<Context> mContext; private WeakReference<ImageView> mImageView; public QRTask(Context context,ImageView imageView){ mContext = new WeakReference<>(context); mImageView = new WeakReference<>(imageView); } @Override protected Bitmap doInBackground(String... strings) { String str = strings[0]; if(TextUtils.isEmpty(str)) { return null; } int size = mContext.get().getResources().getDimensionPixelOffset(R.dimen.qr_code_size); return QRCodeEncoder.syncEncodeQRCode(str,size); } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if(bitmap!=null) { mImageView.get().setImageBitmap(bitmap); }else{ Toast.makeText(mContext.get(),"生成失敗",Toast.LENGTH_SHORT).show(); } } } //判斷版本是否為6.0以上 private void checkPermission() { if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) { //Toast.makeText(MainActivity.this,"掃一掃",Toast.LENGTH_SHORT).show(); if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},100); }else{ startActivity(new Intent(MainActivity.this,ScanActivity.class)); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(requestCode==100&&grantResults[0]==PackageManager.PERMISSION_GRANTED){ startActivity(new Intent(MainActivity.this,ScanActivity.class)); } }
}
package com.example.project;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.ZXingView;
public class ScanActivity extends AppCompatActivity implements QRCodeView.Delegate{
private ZXingView zXingView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_activity);
zXingView = findViewById(R.id.zxingView);
zXingView.setDelegate(this);
}
@Override
protected void onResume() {
super.onResume();
zXingView.startCamera();
zXingView.startSpotAndShowRect();
zXingView.openFlashlight();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onScanQRCodeSuccess(String result) {
Log.i("TEST","result is"+result);
}
@Override
public void onCameraAmbientBrightnessChanged(boolean isDark) {
//變暗為true
}
@Override
public void onScanQRCodeOpenCameraError() {
//開啟相機失敗
}
}