Zxingを使用してQRコードの生成、スキャンを実現
7821 ワード
CSDNから転載
Android
ここでは、基本コードと使用ルールをまとめます.
まず、github-Zxingの公式ライブラリのアドレスgithub-zxing-android-embeddedは、非常に使いやすいandroidツールです.
1.インポート方法
android studioを使用する場合はgradleファイルに以下を追加します.
みんなに1つのウェブサイトをあげてこの中で使うことができるMavenライブラリを検索することができます
ZXing Android Embeddedのインポート
QRコードを生成するにはどうすればいいですか?
次の方法では、文字列を入力し、表示に使用できるQRコードのBitmapを生成します.
ZXing Android Embeddedを使うメリットが明らかになったのではないでしょうか.その後のスキャンと生成機能については,別々に議論しない.
スキャン方法
スキャンを使用する場合は、システムのサービスを利用し、現在のMainActivityからCustomScanActivityにジャンプします.
スキャンのスタイルは完全にカスタマイズできます
関連コードは次のとおりです.
MainActivity:
CustomScanActivityにはフラッシュを開くbuttonと、2つのポーズのbuttonが追加されています
対応するlayoutファイル
コアコードは実は少なくて、比較的に掌握しやすいです
Android
ここでは、基本コードと使用ルールをまとめます.
まず、github-Zxingの公式ライブラリのアドレスgithub-zxing-android-embeddedは、非常に使いやすいandroidツールです.
1.インポート方法
android studioを使用する場合はgradleファイルに以下を追加します.
compile 'com.google.zxing:core:3.2.1'
compile group: 'com.google.zxing', name: 'core', version: '3.2.1'
みんなに1つのウェブサイトをあげてこの中で使うことができるMavenライブラリを検索することができます
ZXing Android Embeddedのインポート
repositories {
jcenter()
}
dependencies {
compile 'com.journeyapps:zxing-android-embedded:3.3.0'
compile 'com.android.support:appcompat-v7:23.1.0' // Version 23+ is required || 23
}
android {
buildToolsVersion '23.0.2' // Older versions may give compile errors ||
}
QRコードを生成するにはどうすればいいですか?
次の方法では、文字列を入力し、表示に使用できるQRコードのBitmapを生成します.
Bitmap encodeAsBitmap(String str){
Bitmap bitmap = null;
BitMatrix result = null;
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try {
result = multiFormatWriter.encode(str, BarcodeFormat.QR_CODE, 200, 200);
// ZXing Android Embedded
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
bitmap = barcodeEncoder.createBitmap(result);
} catch (WriterException e){
e.printStackTrace();
} catch (IllegalArgumentException iae){ // ?
return null;
}
// ZXing Android Embedded ,
// int w = result.getWidth();
// int h = result.getHeight();
// int[] pixels = new int[w * h];
// for (int y = 0; y < h; y++) {
// int offset = y * w;
// for (int x = 0; x < w; x++) {
// pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
// }
// }
// bitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
// bitmap.setPixels(pixels,0,100,0,0,w,h);
return bitmap;
}
ZXing Android Embeddedを使うメリットが明らかになったのではないでしょうか.その後のスキャンと生成機能については,別々に議論しない.
スキャン方法
スキャンを使用する場合は、システムのサービスを利用し、現在のMainActivityからCustomScanActivityにジャンプします.
スキャンのスタイルは完全にカスタマイズできます
関連コードは次のとおりです.
MainActivity:
// , ,
//
public void customScan(){
new IntentIntegrator(this)
.setOrientationLocked(false)
.setCaptureActivity(CustomScanActivity.class) // activity CustomActivity
.initiateScan(); //
}
@Override
// onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
if(intentResult != null) {
if(intentResult.getContents() == null) {
Toast.makeText(this," ",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this," ",Toast.LENGTH_LONG).show();
// ScanResult
String ScanResult = intentResult.getContents();
}
} else {
super.onActivityResult(requestCode,resultCode,data);
}
}
CustomScanActivityにはフラッシュを開くbuttonと、2つのポーズのbuttonが追加されています
対応するlayoutファイル
java文件 其中有使用 ButterKnife
public class CustomScanActivity extends AppCompatActivity implements DecoratedBarcodeView.TorchListener{ //
// , , Toast
@BindView(R.id.btn_switch) Button swichLight;
@BindView(R.id.btn_hint1) Button hint1Show;
@BindView(R.id.btn_hint2) Button hint2Show;
@BindView(R.id.dbv_custom) DecoratedBarcodeView mDBV;
private CaptureManager captureManager;
private boolean isLightOn = false;
@Override
protected void onPause() {
super.onPause();
captureManager.onPause();
}
@Override
protected void onResume() {
super.onResume();
captureManager.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
captureManager.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
captureManager.onSaveInstanceState(outState);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return mDBV.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_scan);
ButterKnife.bind(this);
mDBV.setTorchListener(this);
// ,
if(!hasFlash()) {
swichLight.setVisibility(View.GONE);
}
// ,
captureManager = new CaptureManager(this,mDBV);
captureManager.initializeFromIntent(getIntent(),savedInstanceState);
captureManager.decode();
}
// torch
@Override
public void onTorchOn() {
Toast.makeText(this,"torch on",Toast.LENGTH_LONG).show();
isLightOn = true;
}
@Override
public void onTorchOff() {
Toast.makeText(this,"torch off",Toast.LENGTH_LONG).show();
isLightOn = false;
}
//
private boolean hasFlash() {
return getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
//
@OnClick(R.id.btn_switch)
public void swichLight(){
if(isLightOn){
mDBV.setTorchOff();
}else{
mDBV.setTorchOn();
}
}
}
コアコードは実は少なくて、比較的に掌握しやすいです