使用依賴(ZXing)簡單的實現二維碼的掃描和生成
阿新 • • 發佈:2018-11-19
一個簡單的佈局
第一步:新增依賴
//二維碼依賴
implementation 'cn.yipianfengye.android:zxing-library:2.1'
這時候你要新增進去的話會有一個版本衝突,下面解決V4、V7版本衝突
//解決V4、V7版本衝突 configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '27.1.1' } } } }
第二步新增許可權
<!-- 二維碼需要的許可權 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" />
第三步在類繼承Application中初始化二維碼工具
//需要在清單檔案註冊
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化二維碼工具類
ZXingLibrary.initDisplayOpinion(this);
}
}
第四步:佈局,很簡單就2個按鈕
第五步:開始寫MainActivity
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //相應狀態碼 private static final int RESPON_CODE = 5 ; //點選事件 public void co(View view) { //跳轉到掃描二維碼介面操作 Intent intent = new Intent(MainActivity.this,CaptureActivity.class); startActivityForResult(intent,RESPON_CODE); } //為了方便接收所以需要onActivityResult分別進行處理 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //處理二維碼掃描結果,對狀態碼進行判斷 if(requestCode == RESPON_CODE){ //處理掃描結果(在介面上顯示) if(null != data){ // Bundle bundle = data.getExtras(); if(bundle == null){ return; } if(bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS){ String result = bundle.getString(CodeUtils.RESULT_STRING); Toast.makeText(this, "解析結果:"+result, Toast.LENGTH_SHORT).show(); }else if(bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED){ Toast.makeText(MainActivity.this , "解析二維碼失敗", Toast.LENGTH_SHORT).show(); } } } } /* * 跳到生成二維碼圖片的地方 * */ public void cod(View view) { startActivity(new Intent(MainActivity.this,QRCodeActivity.class)); finish(); } }
第六步:跳轉到生成二維碼的Actvity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qrcode);
//找控制元件
mEditText = findViewById(R.id.editText);
mLogBtn = findViewById(R.id.logBtn);
mPtBtn = findViewById(R.id.ptBtn);
mImageView = findViewById(R.id.imageView);
}
//帶log二維碼,兩個點選事件
public void logB(View view) {
//獲取輸入框的內容
String textContent = mEditText.getText().toString();
//判斷是否為空
if(TextUtils.isEmpty(textContent)){
Toast.makeText(this, "輸入的為空", Toast.LENGTH_SHORT).show();
return;
}
mEditText.setText("");
mBitmap = CodeUtils.createImage(textContent, 400, 400, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
mImageView.setImageBitmap(mBitmap);
}
//不帶log
public void ptB(View view) {
//獲取輸入框的內容
String textContent = mEditText.getText().toString();
//判斷是否為空
if(TextUtils.isEmpty(textContent)){
Toast.makeText(this, "輸入的為空", Toast.LENGTH_SHORT).show();
return;
}
mEditText.setText("");
Bitmap bitmap = CodeUtils.createImage(textContent, 400, 400, null);
mImageView.setImageBitmap(bitmap);
}
佈局還是特別簡單的