<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">本文主要讲关于安卓的二维码的使用:扫描二维码,生成简单的二维码</span>
要点: QR コードのスキャンには関連するフレームワークが必要です. Google は公式に優れたフレームワークを提供しています: ZXing フレームワーク, これは比較的シンプルで使いやすいです.
プラットフォーム: android スタジオ、最初は依存関係を追加することです。2 つの方法で、依存関係で ZXing を直接検索し、goodle フレームワークを選択します。
または、lib を選択して依存関係を追加することもできます. ここでは、github でライブラリを見つけることができ (https://github.com/yzbbanban に移動して、QR コードに関する関連プロジェクトを表示できます)、ここで lib ライブラリを直接インポートできます。 . import メソッドは、Android プロジェクトへの lib Import を使用するようになりました
次に、依存関係を追加します
追加後の結果です
コード部分は非常にシンプルで、レイアウト ファイルは Button+TextView を使用し、TextView はスキャン結果の表示に使用されます。
レイアウト コード:
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:onClick="scan"
android:layout_height="wrap_content"
android:text="扫描" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textColor="@color/colorAccent"
android:textSize="24sp" />
Button に onClick イベントを追加する
public void scan(View view) {
startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
}
QR コードのスキャンに関連する CaptureActivity を直接開始し、登録ファイルにアクセス許可を追加する必要はなく (カメラのアクセス許可はライブラリに追加されています)、直接呼び出すだけで、スキャン後に戻り値を取得する必要があります。したがって、1 つの戻り値を取得するには startActivityForResult が必要です
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
String text = bundle.getString("result");
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
tv.setText(text);
}
}
関連データを提示するための戻り値を取得します。ここで、resultCode で取得されたパラメーターは lib の CaptureActivity の戻り結果であり、関連するコードは次のとおりです。
public void handleDecode(Result rawResult, Bundle bundle) {
inactivityTimer.onActivity();
beepManager.playBeepSoundAndVibrate();
Intent resultIntent = new Intent();
bundle.putInt("width", mCropRect.width());
bundle.putInt("height", mCropRect.height());
bundle.putString("result", rawResult.getText());
resultIntent.putExtras(bundle);
this.setResult(RESULT_OK, resultIntent);
CaptureActivity.this.finish();
}
つまり、取得した値はバンドルであり、バンドルを使用して関連するパラメーターを onActivityResult に返す必要があります。
このようにして、QRコードをスキャンする簡単なプログラムが完成し、QRコードの結果を返して文字列を生成することができます
テキストから QR コードを生成するコードを紹介します。これもフレームワークのメソッドを使用します。少しだけ説明します。
レイアウト コード:
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_make"
android:text="生成二维码"
android:onClick="make"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/iv"
android:src="@mipmap/my_logo"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
入力ボックス、生成ボタン、リアルな画像 (Linnerlayout レイアウト)
メソッドはとてもシンプルです. 入力ボックスのデータを取得してから EncodingUtils の CreatorCode() メソッドを呼び出します. パラメータは: 入力内容, 画像の幅, 画像の高さ, ロゴ画像 (ビットマップ) です.
public void make(View view) {
String intput = et.getText().toString().trim();
if ("".equals(intput)) {
Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();
} else {
Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);
iv.setImageBitmap(b
);
}
}
次に、メイン コードの完全なコードがあります。
package com.wangban.yzbbanban.myapplication;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;
public class MainActivity extends AppCompatActivity {
private TextView tv;
private EditText et;
private ImageView iv;
private Bitmap logo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
et = (EditText) findViewById(R.id.et);
iv = (ImageView) findViewById(R.id.iv);
logo = BitmapFactory.decodeResource(getResources(), R.mipmap.my_logo);
}
public void scan(View view) {
startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
}
public void make(View view) {
String intput = et.getText().toString().trim();
if ("".equals(intput)) {
Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();
} else {
Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);
iv.setImageBitmap(b
);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
String text = bundle.getString("result");
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
tv.setText(text);
}
}
}