簡單的掃描二維碼吐司+生成二維碼
阿新 • • 發佈:2018-12-11
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" />