Androidアプリ開発

任意の文字列をQRコードで表示する

この記事は約12分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、
記事の最後で紹介します)

この記事のテーマ


任意の文字列をQRコードで表示する

QRコードでデータ交換する考え方もアリですね!

ポイント

URLの交換をスマホで行う場合に便利なQRコード。
QRコードはURLの交換に特化したインタフェースではありません。
任意のデータをQRコードで表示して、データ交換の手段として使用できます。
QRコードに表示できるデータ量は、数字が7089字、英数字が4296字、 漢字が1817字、バイナリが2953バイトです。
今回は任意の文字列をQRコードで表示する実装を紹介します。

QRコードとは

QRコードの表示

QRコードを表示する場合、オープンソースのZXingライブラリを使用すれば簡単に実装できます。
ZXingライブラリは、QRコードの他にバーコードなどの2次元コードを扱うことが可能です。

ZXing

QRダイアログ

QRコードの表示をダイアログ画面として実装します。
サンプルではタイトル、QRコード化する文字列を引数にダイアログ画面を表示、画面のタップで閉じます。

◎build.gradle(モジュール)

dependencies {
    …
    implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
    …
}

◎CustomDialogQr.java

public class CustomDialogQr extends DialogFragment {
    private static final String TAG = CustomDialogQr.class.getSimpleName();

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = new Dialog(requireActivity());
        String title = requireArguments().getString("TITLE");
        String qr = requireArguments().getString("QR");
        Objects.requireNonNull(dialog.getWindow()).requestFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
        dialog.setContentView(R.layout.dialog_qrcode);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.setCanceledOnTouchOutside(true);
        dialog.findViewById(R.id.layout).setOnClickListener(view -> dismiss());
        TextView textView = dialog.findViewById(R.id.title);
        textView.setOnClickListener(view1 -> dismiss());
        textView.setText(title);
        //QRコード画像の大きさを指定(pixel)
        int size = (int) (120 * getResources().getDisplayMetrics().density);
        try {
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            //QRコードをBitmapで作成
            Bitmap bitmap = barcodeEncoder.encodeBitmap(qr, BarcodeFormat.QR_CODE, size, size);
            //作成したQRコードを画面上に配置
            ImageView qrcode = dialog.findViewById(R.id.qrcode);
            qrcode.setOnClickListener(view1 -> dismiss());
            qrcode.setImageBitmap(bitmap);
        } catch (WriterException e) {
            Log.d(TAG, e.getMessage() != null ? e.getMessage() : "onCreateDialog:IOException");
        }
        return dialog;
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
}

BarcodeEncoderにQRコード化する文字列、フォーマット、サイズを指定して、結果をBitmapで受け取ります。
受け取ったBitmapをImageViewにセットします。

◎dialog_qrcode.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">
    <FrameLayout
        android:id="@+id/layout"
        android:layout_width="240dp"
        android:layout_height="240dp"
        tools:ignore="UselessParent">
        <TextView
            android:id="@+id/title"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:gravity="center"
            style="@style/TextViewStyle3"/>
        <ImageView
            android:id="@+id/qrcode"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:layout_gravity="center"
            android:importantForAccessibility="no" />
    </FrameLayout>
</RelativeLayout>

QRダイアログを表示する

タイトルとQRコード化する文字列をBundleにセットして、QRダイアログを表示します。

:
// GRコード表示
Bundle bundle = new Bundle();
bundle.putString("TITLE", "Googleスプレッドシート");
bundle.putString("QR", "https://docs.google.com/spreadsheets/d/.../edit?usp=drive_link");
CustomDialogQr customDialogQr = new CustomDialogQr();
customDialogQr.setArguments(bundle);
customDialogQr.show(getSupportFragmentManager(), "Googleスプレッドシート");
:

今回は、ここまでです。

任意の文字列をQRコードで表示しているAndroidアプリです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。

未経験者からシステムエンジニアを目指すのに最適です。まずは無料相談から♪

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました