Android二次元コード簡単開発

<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);
        }
    }

}

おすすめ

転載: blog.csdn.net/u013377003/article/details/52034688