1. 程式人生 > >簡單的掃描二維碼吐司+生成二維碼

簡單的掃描二維碼吐司+生成二維碼

1.匯入依賴(build.gradle)

implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4'

2.MainActivity頁面

public class MainActivity extends AppCompatActivity {

private EditText editText;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
}

private void init() {
    //獲取資源ID
    editText = findViewById(R.id.edtext);
    imageView = findViewById(R.id.img);

    //點選按鈕掃描二維碼
    findViewById(R.id.scan).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checkedPermission();
        }
    });

    //點選按鈕生成二維碼
    findViewById(R.id.produce).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            creatQRCode();
        }
    });
}

//判斷版本是否在6.0以上。6.0以上需要動態新增許可權
private void checkedPermission() {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        //判斷有沒有許可權,沒有就授權,否則進行跳轉
        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,LoginActivity.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,LoginActivity.class));
    }
}

//生成二維碼
    private void creatQRCode(){
        QRTask qrTask = new QRTask(this,imageView,editText);
        qrTask.execute(editText.getText().toString());
    }
    static class QRTask extends AsyncTask<String,Void,Bitmap>{

    private WeakReference<Context> mContext;
    private WeakReference<ImageView> imageView;

    public QRTask(Context context,ImageView mimageView,EditText editText){
        mContext = new WeakReference<>(context);
        imageView = new WeakReference<>(mimageView);
    }

    @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){
            imageView.get().setImageBitmap(bitmap);
        }else{
            Toast.makeText(mContext.get(),"生成失敗",Toast.LENGTH_SHORT).show();
        }
    }
}
}

3.掃描二維碼提示吐司的Activity

public class LoginActivity extends AppCompatActivity implements QRCodeView.Delegate {

private ZXingView xingView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    //獲取資源ID
    xingView = findViewById(R.id.zXing);
    xingView.setDelegate(this);
}

@Override
protected void onResume() {
    super.onResume();
    xingView.startCamera();
    xingView.startSpotAndShowRect();
    /*xingView.openFlashlight();*/
}

@Override
protected void onStop() {
    super.onStop();
    xingView.stopCamera();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    xingView.onDestroy();
}

@Override
public void onScanQRCodeSuccess(String result) {

    Toast.makeText(this,result.toString(),Toast.LENGTH_SHORT).show();

}

@Override
public void onCameraAmbientBrightnessChanged(boolean isDark) {

    //環境改變,是否變暗,變暗isDark為true
}

@Override
public void onScanQRCodeOpenCameraError() {
    //開啟相機失敗

}
}

3.1Xml佈局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".LoginActivity">

<cn.bingoogolapple.qrcode.zxing.ZXingView
    android:id="@+id/zXing"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

</android.support.constraint.ConstraintLayout>

4.Main Xml佈局

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

<Button
    android:id="@+id/scan"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="掃描二維碼"
    />

<EditText
    android:id="@+id/edtext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="15"
    android:hint="請輸入內容"
    />

<Button
    android:id="@+id/produce"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="生成二維碼"
    />

<ImageView
    android:id="@+id/img"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:gravity="center_horizontal"
    android:background="@mipmap/ic_launcher"
    />

</LinearLayout>

在清單檔案中配置許可權

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.CAMERA" />