{"id":584,"date":"2023-08-09T09:36:58","date_gmt":"2023-02-01T06:57:57","guid":{"rendered":"https:\/\/www.silicloud.com\/ja\/blog\/index.php\/2023\/11\/30\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/"},"modified":"2025-08-01T00:48:36","modified_gmt":"2025-07-31T15:48:36","slug":"qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/","title":{"rendered":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc &#8211; Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc"},"content":{"rendered":"<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Android\u30a2\u30d7\u30ea\u5185\u3067\u5229\u7528\u3067\u304d\u308bQR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3084\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3001Google Mobile Vision API\u306b\u3042\u308b\u30d0\u30fc\u30b3\u30fc\u30c9API\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002\u307e\u305f\u3001Vision API\u3092\u4f7f\u7528\u3057\u305f\u9854\u691c\u51fa\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<h2>\u30a2\u30f3\u30c9\u30ed\u30a4\u30c9\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656491f4daa94e2bdf7be8ec\/2-0.png\" alt=\"QR Code Scanner for Android, Bar code scanner for android tutorial\" \/><\/div>\n<ul class=\"post-ul\">\n<li>1D barcodes: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code-128, ITF, Codabar<\/li>\n<li>2D barcodes: QR Code, Data Matrix, PDF-417, AZTEC<\/li>\n<\/ul>\n<p>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u65e5\u672c\u8a9e\u3067\u4e00\u3064\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u8a00\u3044\u63db\u3048\u307e\u3059\uff1a<br \/>\n\u30d0\u30fc\u30b3\u30fc\u30c9\u306f\u3001URL\u3001\u9023\u7d61\u5148\u60c5\u5831\u3001\u4f4d\u7f6e\u60c5\u5831\u3001Wi-Fi\u3001\u904b\u8ee2\u514d\u8a31\u8a3c\u306eID\u306a\u3069\u3001\u3055\u307e\u3056\u307e\u306a\u3082\u306e\u3092\u30b9\u30ad\u30e3\u30f3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002QR\u30b3\u30fc\u30c9\u306f\u3088\u308a\u30dd\u30d4\u30e5\u30e9\u30fc\u306a\u5f62\u5f0f\u3067\u3042\u308a\u3001\u591a\u304f\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3088\u304f\u898b\u304b\u3051\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u306f\u3001\u30d3\u30c3\u30c8\u30de\u30c3\u30d7\u753b\u50cf\u304b\u3089QR\u30b3\u30fc\u30c9\u306e\u5024\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u30ab\u30e1\u30e9\u3092\u901a\u3058\u3066QR\u30b3\u30fc\u30c9\u3092\u691c\u51fa\u3057\u3066\u95a2\u9023\u3059\u308b\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3057\u307e\u3059\u3002<\/p>\n<h2>Android\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eQR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656491f4daa94e2bdf7be8ec\/6-0.png\" alt=\"QR Code Scanner for Android, Barcode scanner for anroid\" \/><\/div>\n<h3>\u30d0\u30fc\u30b3\u30fc\u30c9\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u305f\u3081\u306bAndroid Studio\u3092\u8a2d\u5b9a\u3059\u308b<\/h3>\n<p>&#8220;build.gradle\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002&#8221;<\/p>\n<pre class=\"post-pre\"><code>implementation 'com.google.android.gms:play-services-vision:11.8.0'\r\n<\/code><\/pre>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067\u30d0\u30fc\u30b3\u30fc\u30c9\u306e\u691c\u51fa\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u3001AndroidManifest.xml\u30d5\u30a1\u30a4\u30eb\u306eapplication\u30bf\u30b0\u5185\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;meta-data\r\n            android:name=\"com.google.android.gms.vision.DEPENDENCIES\"\r\n            android:value=\"barcode\" \/&gt;\r\n<\/code><\/pre>\n<h3>\u753b\u50cf\u304b\u3089\u306eQR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc<\/h3>\n<p>\u4ee5\u4e0b\u306b\u3001activity_main.xml\u30ec\u30a4\u30a2\u30a6\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30fc\u30c9\u304c\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"&gt;\r\n\r\n\r\n    &lt;Button\r\n        android:id=\"@+id\/btnTakePicture\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:text=\"@string\/take_barcode_picture\" \/&gt;\r\n\r\n    &lt;Button\r\n        android:id=\"@+id\/btnScanBarcode\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_below=\"@+id\/btnTakePicture\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:layout_marginTop=\"@dimen\/activity_horizontal_margin\"\r\n        android:text=\"@string\/scan_barcode\" \/&gt;\r\n&lt;\/RelativeLayout&gt;\r\n\r\n<\/code><\/pre>\n<p>\u4e0b\u8a18\u306fMainActivity.java\u306e\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.barcodevisionapi;\r\n\r\nimport android.content.Intent;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\n\r\npublic class MainActivity extends AppCompatActivity implements View.OnClickListener {\r\n\r\n    Button btnTakePicture, btnScanBarcode;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n        initViews();\r\n    }\r\n\r\n    private void initViews() {\r\n        btnTakePicture = findViewById(R.id.btnTakePicture);\r\n        btnScanBarcode = findViewById(R.id.btnScanBarcode);\r\n        btnTakePicture.setOnClickListener(this);\r\n        btnScanBarcode.setOnClickListener(this);\r\n    }\r\n\r\n    @Override\r\n    public void onClick(View v) {\r\n\r\n        switch (v.getId()) {\r\n            case R.id.btnTakePicture:\r\n                startActivity(new Intent(MainActivity.this, PictureBarcodeActivity.class));\r\n                break;\r\n            case R.id.btnScanBarcode:\r\n                startActivity(new Intent(MainActivity.this, ScannedBarcodeActivity.class));\r\n                break;\r\n        }\r\n\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>MainActivity.java\u306b\u306f2\u3064\u306e\u30dc\u30bf\u30f3\u304c\u3042\u308a\u307e\u3059\u3002\u6700\u521d\u306e\u30dc\u30bf\u30f3\u306f\u3001\u30ab\u30e1\u30e9\u304b\u3089\u30ad\u30e3\u30d7\u30c1\u30e3\u3055\u308c\u305f\u30d3\u30c3\u30c8\u30de\u30c3\u30d7\u753b\u50cf\u3067QR\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001QR\u30b3\u30fc\u30c9\u306b\u542b\u307e\u308c\u308b\u30c7\u30fc\u30bf\uff08\u5b58\u5728\u3059\u308b\u5834\u5408\uff09\u3092\u8fd4\u3057\u307e\u3059\u30022\u756a\u76ee\u306e\u30dc\u30bf\u30f3\u306f\u3001QR\u30b3\u30fc\u30c9\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u691c\u51fa\u3057\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306b\u79fb\u308b\u524d\u306b\u3001AndroidManifest.xml\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;uses-feature\r\n        android:name=\"android.hardware.camera\"\r\n        android:required=\"true\" \/&gt;\r\n\r\n    &lt;uses-permission android:name=\"android.permission.CAMERA\" \/&gt;\r\n    &lt;uses-feature android:name=\"android.hardware.camera.autofocus\" \/&gt;\r\n\r\n    &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;\r\n    &lt;uses-permission android:name=\"android.permission.INTERNET\" \/&gt;\r\n<\/code><\/pre>\n<p>\u4ed6\u306e\u30a2\u30d7\u30ea\u306b\u3088\u3063\u3066\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u5171\u6709\u3057\u3001\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306b\u306f\u3001AndroidManifest.xml \u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30bf\u30b0\u5185\u306b\u6b21\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u30bf\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;provider\r\n            android:name=\"android.support.v4.content.FileProvider\"\r\n            android:authorities=\"${applicationId}.provider\"\r\n            android:exported=\"false\"\r\n            android:grantUriPermissions=\"true\"&gt;\r\n            &lt;meta-data\r\n                android:name=\"android.support.FILE_PROVIDER_PATHS\"\r\n                android:resource=\"@xml\/provider_paths\" \/&gt;\r\n        &lt;\/provider&gt;\r\n<\/code><\/pre>\n<p>\u3053\u308c\u306f\u3001Android\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eQR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u3067\u64ae\u5f71\u3055\u308c\u305f\u753b\u50cf\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u3067\u3059\u3002\u6700\u521d\u306e\u3082\u306e\u3067\u3042\u308bPictureBarcodeActivity.java\u304b\u3089\u59cb\u3081\u307e\u3057\u3087\u3046\u3002xml\u30ec\u30a4\u30a2\u30a6\u30c8activity_barcode_picture.xml\u7528\u306e\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:tools=\"https:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"&gt;\r\n\r\n    &lt;ImageView\r\n        android:id=\"@+id\/imageView\"\r\n        android:layout_width=\"150dp\"\r\n        android:layout_height=\"150dp\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:src=\"@mipmap\/scdev_logo\" \/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/txtResultsHeader\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_below=\"@+id\/imageView\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:text=\"Results\"\r\n        android:textSize=\"18sp\"\r\n        android:textStyle=\"bold\" \/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/txtResultsBody\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_below=\"@+id\/txtResultsHeader\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:layout_marginTop=\"@dimen\/activity_horizontal_margin\"\r\n        android:gravity=\"center\" \/&gt;\r\n\r\n    &lt;Button\r\n        android:id=\"@+id\/btnOpenCamera\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_alignParentBottom=\"true\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:layout_marginBottom=\"@dimen\/activity_horizontal_margin\"\r\n        android:layout_marginTop=\"@dimen\/activity_horizontal_margin\"\r\n        android:text=\"@string\/open_camera\" \/&gt;\r\n&lt;\/RelativeLayout&gt;\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u306bPictureCodeActivity.java\u30af\u30e9\u30b9\u306e\u30b3\u30fc\u30c9\u304c\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.barcodevisionapi;\r\n\r\nimport android.Manifest;\r\nimport android.content.Context;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.net.Uri;\r\nimport android.os.Bundle;\r\nimport android.os.Environment;\r\nimport android.provider.MediaStore;\r\nimport android.support.annotation.NonNull;\r\nimport android.support.v4.app.ActivityCompat;\r\nimport android.support.v4.content.FileProvider;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.util.Log;\r\nimport android.util.SparseArray;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\n\r\nimport com.google.android.gms.vision.Frame;\r\nimport com.google.android.gms.vision.barcode.Barcode;\r\nimport com.google.android.gms.vision.barcode.BarcodeDetector;\r\n\r\nimport java.io.File;\r\nimport java.io.FileNotFoundException;\r\n\r\npublic class PictureBarcodeActivity extends AppCompatActivity implements View.OnClickListener {\r\n\r\n    Button btnOpenCamera;\r\n    TextView txtResultBody;\r\n\r\n    private BarcodeDetector detector;\r\n    private Uri imageUri;\r\n    private static final int REQUEST_CAMERA_PERMISSION = 200;\r\n    private static final int CAMERA_REQUEST = 101;\r\n    private static final String TAG = \"API123\";\r\n    private static final String SAVED_INSTANCE_URI = \"uri\";\r\n    private static final String SAVED_INSTANCE_RESULT = \"result\";\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_barcode_picture);\r\n\r\n        initViews();\r\n\r\n        if (savedInstanceState != null) {\r\n            if (imageUri != null) {\r\n                imageUri = Uri.parse(savedInstanceState.getString(SAVED_INSTANCE_URI));\r\n                txtResultBody.setText(savedInstanceState.getString(SAVED_INSTANCE_RESULT));\r\n            }\r\n        }\r\n\r\n        detector = new BarcodeDetector.Builder(getApplicationContext())\r\n                .setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE)\r\n                .build();\r\n\r\n        if (!detector.isOperational()) {\r\n            txtResultBody.setText(\"Detector initialisation failed\");\r\n            return;\r\n        }\r\n    }\r\n\r\n    private void initViews() {\r\n        txtResultBody = findViewById(R.id.txtResultsBody);\r\n        btnOpenCamera = findViewById(R.id.btnTakePicture);\r\n        txtResultBody = findViewById(R.id.txtResultsBody);\r\n        btnOpenCamera.setOnClickListener(this);\r\n    }\r\n\r\n    @Override\r\n    public void onClick(View v) {\r\n\r\n        switch (v.getId()) {\r\n            case R.id.btnTakePicture:\r\n                ActivityCompat.requestPermissions(PictureBarcodeActivity.this, new\r\n                        String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);\r\n                break;\r\n        }\r\n\r\n    }\r\n\r\n    @Override\r\n    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {\r\n        super.onRequestPermissionsResult(requestCode, permissions, grantResults);\r\n        switch (requestCode) {\r\n            case REQUEST_CAMERA_PERMISSION:\r\n                if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED &amp;&amp; grantResults[1] == PackageManager.PERMISSION_GRANTED) {\r\n                    takeBarcodePicture();\r\n                } else {\r\n                    Toast.makeText(getApplicationContext(), \"Permission Denied!\", Toast.LENGTH_SHORT).show();\r\n                }\r\n        }\r\n    }\r\n\r\n    @Override\r\n    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\r\n        if (requestCode == CAMERA_REQUEST &amp;&amp; resultCode == RESULT_OK) {\r\n            launchMediaScanIntent();\r\n            try {\r\n\r\n\r\n                Bitmap bitmap = decodeBitmapUri(this, imageUri);\r\n                if (detector.isOperational() &amp;&amp; bitmap != null) {\r\n                    Frame frame = new Frame.Builder().setBitmap(bitmap).build();\r\n                    SparseArray&lt;Barcode&gt; barcodes = detector.detect(frame);\r\n                    for (int index = 0; index &lt; barcodes.size(); index++) {\r\n                        Barcode code = barcodes.valueAt(index);\r\n                        txtResultBody.setText(txtResultBody.getText() + \"\\n\" + code.displayValue + \"\\n\");\r\n\r\n                        int type = barcodes.valueAt(index).valueFormat;\r\n                        switch (type) {\r\n                            case Barcode.CONTACT_INFO:\r\n                                Log.i(TAG, code.contactInfo.title);\r\n                                break;\r\n                            case Barcode.EMAIL:\r\n                                Log.i(TAG, code.displayValue);\r\n                                break;\r\n                            case Barcode.ISBN:\r\n                                Log.i(TAG, code.rawValue);\r\n                                break;\r\n                            case Barcode.PHONE:\r\n                                Log.i(TAG, code.phone.number);\r\n                                break;\r\n                            case Barcode.PRODUCT:\r\n                                Log.i(TAG, code.rawValue);\r\n                                break;\r\n                            case Barcode.SMS:\r\n                                Log.i(TAG, code.sms.message);\r\n                                break;\r\n                            case Barcode.TEXT:\r\n                                Log.i(TAG, code.displayValue);\r\n                                break;\r\n                            case Barcode.URL:\r\n                                Log.i(TAG, \"url: \" + code.displayValue);\r\n                                break;\r\n                            case Barcode.WIFI:\r\n                                Log.i(TAG, code.wifi.ssid);\r\n                                break;\r\n                            case Barcode.GEO:\r\n                                Log.i(TAG, code.geoPoint.lat + \":\" + code.geoPoint.lng);\r\n                                break;\r\n                            case Barcode.CALENDAR_EVENT:\r\n                                Log.i(TAG, code.calendarEvent.description);\r\n                                break;\r\n                            case Barcode.DRIVER_LICENSE:\r\n                                Log.i(TAG, code.driverLicense.licenseNumber);\r\n                                break;\r\n                            default:\r\n                                Log.i(TAG, code.rawValue);\r\n                                break;\r\n                        }\r\n                    }\r\n                    if (barcodes.size() == 0) {\r\n                        txtResultBody.setText(\"No barcode could be detected. Please try again.\");\r\n                    }\r\n                } else {\r\n                    txtResultBody.setText(\"Detector initialisation failed\");\r\n                }\r\n            } catch (Exception e) {\r\n                Toast.makeText(getApplicationContext(), \"Failed to load Image\", Toast.LENGTH_SHORT)\r\n                        .show();\r\n                Log.e(TAG, e.toString());\r\n            }\r\n        }\r\n    }\r\n\r\n    private void takeBarcodePicture() {\r\n        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);\r\n        File photo = new File(Environment.getExternalStorageDirectory(), \"pic.jpg\");\r\n        imageUri = FileProvider.getUriForFile(PictureBarcodeActivity.this,\r\n                BuildConfig.APPLICATION_ID + \".provider\", photo);\r\n        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);\r\n        startActivityForResult(intent, CAMERA_REQUEST);\r\n    }\r\n\r\n    @Override\r\n    protected void onSaveInstanceState(Bundle outState) {\r\n        if (imageUri != null) {\r\n            outState.putString(SAVED_INSTANCE_URI, imageUri.toString());\r\n            outState.putString(SAVED_INSTANCE_RESULT, txtResultBody.getText().toString());\r\n        }\r\n        super.onSaveInstanceState(outState);\r\n    }\r\n\r\n    private void launchMediaScanIntent() {\r\n        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);\r\n        mediaScanIntent.setData(imageUri);\r\n        this.sendBroadcast(mediaScanIntent);\r\n    }\r\n\r\n    private Bitmap decodeBitmapUri(Context ctx, Uri uri) throws FileNotFoundException {\r\n        int targetW = 600;\r\n        int targetH = 600;\r\n        BitmapFactory.Options bmOptions = new BitmapFactory.Options();\r\n        bmOptions.inJustDecodeBounds = true;\r\n        BitmapFactory.decodeStream(ctx.getContentResolver().openInputStream(uri), null, bmOptions);\r\n        int photoW = bmOptions.outWidth;\r\n        int photoH = bmOptions.outHeight;\r\n\r\n        int scaleFactor = Math.min(photoW \/ targetW, photoH \/ targetH);\r\n        bmOptions.inJustDecodeBounds = false;\r\n        bmOptions.inSampleSize = scaleFactor;\r\n\r\n        return BitmapFactory.decodeStream(ctx.getContentResolver()\r\n                .openInputStream(uri), null, bmOptions);\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u304b\u3089\u5f97\u3089\u308c\u308b\u3044\u304f\u3064\u304b\u306e\u63a8\u8ad6\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>The following code creates a Barcode Detector.<br \/>\ndetector = new BarcodeDetector.Builder(getApplicationContext())<br \/>\n.setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE)<br \/>\n.build();<\/li>\n<li>The types of formats to be scanned are set inside the method setBarcodeFormats().<\/li>\n<li>takeBarcodePicture() function is where the camera is launched. To retrieve the image we use the launchMediaScanIntent() that calls a broadcast Intent to search for the image using the image URI.<\/li>\n<li>A Frame.Builder is used to create a frame of the Bitmap image. Over the frame, the Barcode detector scans for the possible QR Codes. The following line in the above code creates a Frame out of the Bitmap.<br \/>\nFrame frame = new Frame.Builder().setBitmap(bitmap).build();<\/li>\n<li>We\u2019ve created a SparseArray that\u2019ll contain all possible QR Codes present in the image by invoking the detect() method over the Barcode Detector.<br \/>\nSparseArray barcodes = detector.detect(frame);To get the format of the QR Code, the valueFormat field is called over the Barcode instance as shown below.<br \/>\nbarcodes.valueAt(index).valueFormat<\/li>\n<li>To get the displayed value and the raw values, the following are invoked.<br \/>\nbarcodes.valueAt(index).displayValue<br \/>\nbarcodes.valueAt(index).rawValue<\/li>\n<li>The relevant value returned is displayed in the TextView. For then one Barcodes in a Bitmap, their values are appended to the current TextView.<\/li>\n<\/ul>\n<p>ScannedBarcodeActivity.java\u30af\u30e9\u30b9\u306f\u30ab\u30e1\u30e9\u3092\u4ecb\u3057\u3066\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u3002\u79c1\u305f\u3061\u306f\u3053\u3053\u304b\u3089\u72ec\u81ea\u306e2\u3064\u306e\u30ab\u30b9\u30bf\u30e0QR\u30b3\u30fc\u30c9\u3092\u751f\u6210\u3057\u307e\u3057\u305f\u3002activity_scan_barcode.xml\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:padding=\"@dimen\/activity_horizontal_margin\"&gt;\r\n\r\n    &lt;SurfaceView\r\n        android:id=\"@+id\/surfaceView\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:layout_above=\"@+id\/btnAction\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_alignParentStart=\"true\"\r\n        android:layout_centerVertical=\"true\" \/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/txtBarcodeValue\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_alignParentTop=\"true\"\r\n        android:layout_marginLeft=\"@dimen\/activity_horizontal_margin\"\r\n        android:layout_marginStart=\"@dimen\/activity_horizontal_margin\"\r\n        android:text=\"No Barcode Detected\"\r\n        android:textColor=\"@android:color\/white\"\r\n        android:textSize=\"20sp\" \/&gt;\r\n\r\n\r\n    &lt;Button\r\n        android:id=\"@+id\/btnAction\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_alignParentBottom=\"true\"\r\n        android:text=\"ADD CONTENT IN THE MAIL\" \/&gt;\r\n\r\n&lt;\/RelativeLayout&gt;\r\n<\/code><\/pre>\n<h3>Android\u7528\u306e\u30ab\u30e1\u30e9\u304b\u3089\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca<\/h3>\n<p>\u4ee5\u4e0b\u306bScannedBarcodeActivity.java\u306e\u30b3\u30fc\u30c9\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.barcodevisionapi;\r\n\r\nimport android.Manifest;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.net.Uri;\r\nimport android.os.Bundle;\r\nimport android.support.v4.app.ActivityCompat;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.util.SparseArray;\r\nimport android.view.SurfaceHolder;\r\nimport android.view.SurfaceView;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\n\r\nimport com.google.android.gms.vision.CameraSource;\r\nimport com.google.android.gms.vision.Detector;\r\nimport com.google.android.gms.vision.barcode.Barcode;\r\nimport com.google.android.gms.vision.barcode.BarcodeDetector;\r\n\r\nimport java.io.IOException;\r\n\r\npublic class ScannedBarcodeActivity extends AppCompatActivity {\r\n\r\n    SurfaceView surfaceView;\r\n    TextView txtBarcodeValue;\r\n    private BarcodeDetector barcodeDetector;\r\n    private CameraSource cameraSource;\r\n    private static final int REQUEST_CAMERA_PERMISSION = 201;\r\n    Button btnAction;\r\n    String intentData = \"\";\r\n    boolean isEmail = false;\r\n\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_scan_barcode);\r\n\r\n        initViews();\r\n    }\r\n\r\n    private void initViews() {\r\n        txtBarcodeValue = findViewById(R.id.txtBarcodeValue);\r\n        surfaceView = findViewById(R.id.surfaceView);\r\n        btnAction = findViewById(R.id.btnAction);\r\n\r\n\r\n        btnAction.setOnClickListener(new View.OnClickListener() {\r\n            @Override\r\n            public void onClick(View v) {\r\n\r\n                if (intentData.length() &gt; 0) {\r\n                    if (isEmail)\r\n                        startActivity(new Intent(ScannedBarcodeActivity.this, EmailActivity.class).putExtra(\"email_address\", intentData));\r\n                    else {\r\n                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(intentData)));\r\n                    }\r\n                }\r\n\r\n\r\n            }\r\n        });\r\n    }\r\n\r\n    private void initialiseDetectorsAndSources() {\r\n\r\n        Toast.makeText(getApplicationContext(), \"Barcode scanner started\", Toast.LENGTH_SHORT).show();\r\n\r\n        barcodeDetector = new BarcodeDetector.Builder(this)\r\n                .setBarcodeFormats(Barcode.ALL_FORMATS)\r\n                .build();\r\n\r\n        cameraSource = new CameraSource.Builder(this, barcodeDetector)\r\n                .setRequestedPreviewSize(1920, 1080)\r\n                .setAutoFocusEnabled(true) \/\/you should add this feature\r\n                .build();\r\n\r\n        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {\r\n            @Override\r\n            public void surfaceCreated(SurfaceHolder holder) {\r\n                try {\r\n                    if (ActivityCompat.checkSelfPermission(ScannedBarcodeActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {\r\n                        cameraSource.start(surfaceView.getHolder());\r\n                    } else {\r\n                        ActivityCompat.requestPermissions(ScannedBarcodeActivity.this, new\r\n                                String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);\r\n                    }\r\n\r\n                } catch (IOException e) {\r\n                    e.printStackTrace();\r\n                }\r\n\r\n\r\n            }\r\n\r\n            @Override\r\n            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {\r\n            }\r\n\r\n            @Override\r\n            public void surfaceDestroyed(SurfaceHolder holder) {\r\n                cameraSource.stop();\r\n            }\r\n        });\r\n\r\n\r\n        barcodeDetector.setProcessor(new Detector.Processor&lt;Barcode&gt;() {\r\n            @Override\r\n            public void release() {\r\n                Toast.makeText(getApplicationContext(), \"To prevent memory leaks barcode scanner has been stopped\", Toast.LENGTH_SHORT).show();\r\n            }\r\n\r\n            @Override\r\n            public void receiveDetections(Detector.Detections&lt;Barcode&gt; detections) {\r\n                final SparseArray&lt;Barcode&gt; barcodes = detections.getDetectedItems();\r\n                if (barcodes.size() != 0) {\r\n\r\n\r\n                    txtBarcodeValue.post(new Runnable() {\r\n\r\n                        @Override\r\n                        public void run() {\r\n\r\n                            if (barcodes.valueAt(0).email != null) {\r\n                                txtBarcodeValue.removeCallbacks(null);\r\n                                intentData = barcodes.valueAt(0).email.address;\r\n                                txtBarcodeValue.setText(intentData);\r\n                                isEmail = true;\r\n                                btnAction.setText(\"ADD CONTENT TO THE MAIL\");\r\n                            } else {\r\n                                isEmail = false;\r\n                                btnAction.setText(\"LAUNCH URL\");\r\n                                intentData = barcodes.valueAt(0).displayValue;\r\n                                txtBarcodeValue.setText(intentData);\r\n\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n\r\n    @Override\r\n    protected void onPause() {\r\n        super.onPause();\r\n        cameraSource.release();\r\n    }\r\n\r\n    @Override\r\n    protected void onResume() {\r\n        super.onResume();\r\n        initialiseDetectorsAndSources();\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u304b\u3089\u5f97\u3089\u308c\u308b\u3044\u304f\u3064\u304b\u306e\u63a8\u8ad6\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>SurfaceView is good to display camera preview images as it renders the GUI rapidly. The interface SurfaceHolder.Callback is used to receive information about changes that occur in the surface (in this case, the camera preview). SurfaceHolder.Callback implements three methods:SurfaceChanged : This method is called when the size or the format of the surface changes.<br \/>\nSurfaceCreated : When, in the first instance, the surface is created, this method is called.<br \/>\nSurfaceDestroyed : This is called when the surface is destroyed.<\/li>\n<li>CameraSource manages the camera in conjunction with an underlying detector. Here SurfaceView is the underlying detector. CameraSource.start() opens the camera and starts sending preview frames to the SurfaceView. CameraSource is created in the following way:<br \/>\ncameraSource = new CameraSource.Builder(this, barcodeDetector)<br \/>\n.setRequestedPreviewSize(1920, 1080)<br \/>\n.setAutoFocusEnabled(true) \/\/you should add this feature<br \/>\n.build();<\/li>\n<li>We\u2019ve assigned a processor on the Barcode Detector using setProcessor(). The interface contains the callback to the method receiveDetections() which receives the QR Code from the camera preview and adds them in the SparseArray.<\/li>\n<li>The value of the QR Code is displayed in the TextView using a Runnable since the Barcodes are detected in a background thread.<\/li>\n<li>In this example, we\u2019ve created two barcodes using the generator. One contains the URL. The second contains an email address. On clicking the button, based on the QR code value detected, we\u2019ll either launch the URL or send an email to the relevant email address detected from the QR Code.<\/li>\n<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656491f4daa94e2bdf7be8ec\/34-1.gif\" alt=\"QR Code scanner for android\" \/><\/div>\n<p>QR\u30b3\u30fc\u30c9\u3001\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u306e\u4f8b\u984c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001Android\u30a2\u30d7\u30ea\u5185\u3067\u5229\u7528\u3067\u304d\u308bQR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3084\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3001Google Mobile Vision API\u306b\u3042\u308b\u30d0\u30fc\u30b3\u30fc\u30c9API\u306e\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u53d6\u308a\u4e0a\u3052\u307e [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26,61],"class_list":["post-584","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-26","tag-61"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/ja\/blog\/qr\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc-android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\" \/>\n<meta property=\"og:description\" content=\"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/ja\/blog\/qr\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc-android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-01T06:57:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T15:48:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656491f4daa94e2bdf7be8ec\/2-0.png\" \/>\n<meta name=\"author\" content=\"\u7d50\u8863, \u6625\u82b1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u7d50\u8863, \u6625\u82b1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"49\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/\",\"name\":\"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\"},\"datePublished\":\"2023-02-01T06:57:57+00:00\",\"dateModified\":\"2025-07-31T15:48:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac\"},\"description\":\"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/ja\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc &#8211; Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac\",\"name\":\"\u7d50\u8863, \u6625\u82b1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g\",\"caption\":\"\u7d50\u8863, \u6625\u82b1\"},\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/author\/yuiharuka\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Blog - Silicon Cloud","description":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/ja\/blog\/qr\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc-android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\/","og_locale":"ja_JP","og_type":"article","og_title":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc","og_description":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","og_url":"https:\/\/www.silicloud.com\/ja\/blog\/qr\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc-android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-02-01T06:57:57+00:00","article_modified_time":"2025-07-31T15:48:36+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/656491f4daa94e2bdf7be8ec\/2-0.png"}],"author":"\u7d50\u8863, \u6625\u82b1","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"\u7d50\u8863, \u6625\u82b1","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"49\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/","url":"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/","name":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website"},"datePublished":"2023-02-01T06:57:57+00:00","dateModified":"2025-07-31T15:48:36+00:00","author":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac"},"description":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc - Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/ja\/blog\/"},{"@type":"ListItem","position":2,"name":"QR\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc &#8211; Android\u7528\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30ca\u30fc"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website","url":"https:\/\/www.silicloud.com\/ja\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/e52a686063ac76fd8cc6f539d41497ac","name":"\u7d50\u8863, \u6625\u82b1","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c74c6e2eb915a3c8e795b3934aa25a7333e0b38e7f1c7baf52785286ad51105e?s=96&d=mm&r=g","caption":"\u7d50\u8863, \u6625\u82b1"},"url":"https:\/\/www.silicloud.com\/ja\/blog\/author\/yuiharuka\/"},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/qr%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc-android%e7%94%a8%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b3%e3%83%bc%e3%83%89%e3%82%b9%e3%82%ad%e3%83%a3%e3%83%8a%e3%83%bc\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/584","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/comments?post=584"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/584\/revisions"}],"predecessor-version":[{"id":42457,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/584\/revisions\/42457"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/media?parent=584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/categories?post=584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/tags?post=584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}