diff options
author | Bjørn Mork <bjorn@mork.no> | 2019-06-02 09:41:16 +0200 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2019-06-02 09:41:16 +0200 |
commit | fa45f59cb0abb08670ec8d309842a9a9845059c7 (patch) | |
tree | 412b5bce2a2a77065186d69ccfb375a938cc6730 | |
parent | 320e3dc88c632fe6d45f844069655cb4502a19dc (diff) |
QR code scanning and connect works
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r-- | Defogger/res/layout/activity_main.xml | 6 | ||||
-rw-r--r-- | Defogger/res/values/strings.xml | 1 | ||||
-rw-r--r-- | Defogger/src/no/mork/android/defogger/MainActivity.java | 44 |
3 files changed, 51 insertions, 0 deletions
diff --git a/Defogger/res/layout/activity_main.xml b/Defogger/res/layout/activity_main.xml index e6d815e..df1ab37 100644 --- a/Defogger/res/layout/activity_main.xml +++ b/Defogger/res/layout/activity_main.xml @@ -17,6 +17,12 @@ android:layout_height="wrap_content" android:onClick="startScannerActivity" android:text="@string/start_scan"/> + <Button + android:id="@+id/read_qrcode" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:onClick="startQRReaderActivity" + android:text="@string/read_qrcode"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/Defogger/res/values/strings.xml b/Defogger/res/values/strings.xml index 30c8fd7..7fd8df3 100644 --- a/Defogger/res/values/strings.xml +++ b/Defogger/res/values/strings.xml @@ -7,6 +7,7 @@ <!-- Main --> <string name="start_scan">Scan for camera</string> + <string name="read_qrcode">Scan QR Code</string> <string name="wificonfig">Show WiFi configuration</string> <string name="ipconfig">Show IP configuration</string> <string name="sysinfo">Get system information</string> diff --git a/Defogger/src/no/mork/android/defogger/MainActivity.java b/Defogger/src/no/mork/android/defogger/MainActivity.java index e9376ba..4f1f974 100644 --- a/Defogger/src/no/mork/android/defogger/MainActivity.java +++ b/Defogger/src/no/mork/android/defogger/MainActivity.java @@ -32,6 +32,11 @@ import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; + +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; + +import java.lang.StringBuilder; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -91,6 +96,11 @@ public class MainActivity extends Activity { super.onActivityResult(requestCode, resultCode, dataIntent); switch (requestCode) { + case IntentIntegrator.REQUEST_CODE: + IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, dataIntent); + if (scanResult != null) + handleQRScanResult(scanResult); + break; case REQUEST_ENABLE_BT: if (resultCode != RESULT_OK) { // user refused to enable BT? setStatus("Bluetooth is disabled"); @@ -150,6 +160,40 @@ public class MainActivity extends Activity { startActivityForResult(intent, REQUEST_GET_DEVICE); } + public void startQRReaderActivity(View view) { + IntentIntegrator integrator = new IntentIntegrator(this); + integrator.initiateScan(); + } + + private void handleQRScanResult(IntentResult res) { + Log.d(msg, "QR scan resturned: " + res.toString()); + + // DCS-8000LH,A3,12345678,B0C554AABBCC,DCS-8000LH-BBCC,123456 + String[] data = res.getContents().split(","); + if (data.length != 6 || data[3].length() != 12 || data[5].length() != 6) { + setStatus("Unexpected QR scan result - wrong format"); + return; + } + + pincode = data[5]; + + StringBuilder mac = new StringBuilder(data[3]); + mac.insert(10, ':'); + mac.insert(8, ':'); + mac.insert(6, ':'); + mac.insert(4, ':'); + mac.insert(2, ':'); + + if (!bluetoothAdapter.checkBluetoothAddress(mac.toString())) { + Log.d(msg, "Got invalid MAC address from QR scan:" + mac.toString()); + return; + } + + Log.d(msg, "Will attempt to connect to Bluetooth device " + mac.toString()); + BluetoothDevice device = bluetoothAdapter.getRemoteDevice(mac.toString()); + connectDevice(device); + } + // utilities private Map<String,String> splitKV(String kv, String splitter) { |