From 3d36a5083231c16d1afeb0e901b5f38ceaeac944 Mon Sep 17 00:00:00 2001 From: Markus Bullmann Date: Tue, 2 Apr 2019 18:48:18 +0200 Subject: [PATCH] Removed tests, added AndroidX explicitly and added callback interface --- app/build.gradle | 9 +- .../nrftest/ExampleInstrumentedTest.java | 26 ---- .../com/example/nrftest/DecaCallbacks.java | 30 +++-- .../java/com/example/nrftest/DecaManager.java | 9 ++ .../example/nrftest/DecaManagerCallbacks.java | 5 +- .../com/example/nrftest/MainActivity.java | 114 ++++++++++++++++-- app/src/main/res/layout/activity_main.xml | 16 ++- .../com/example/nrftest/ExampleUnitTest.java | 17 --- gradle.properties | 4 - 9 files changed, 152 insertions(+), 78 deletions(-) delete mode 100644 app/src/androidTest/java/com/example/nrftest/ExampleInstrumentedTest.java delete mode 100644 app/src/test/java/com/example/nrftest/ExampleUnitTest.java diff --git a/app/build.gradle b/app/build.gradle index 2c49ef0..dedbf8f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 28 + defaultConfig { applicationId "com.example.nrftest" minSdkVersion 28 @@ -24,9 +25,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'androidx.annotation:annotation:1.0.0' + implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' } diff --git a/app/src/androidTest/java/com/example/nrftest/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/nrftest/ExampleInstrumentedTest.java deleted file mode 100644 index a2a84ce..0000000 --- a/app/src/androidTest/java/com/example/nrftest/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.example.nrftest; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("com.example.nrftest", appContext.getPackageName()); - } -} diff --git a/app/src/main/java/com/example/nrftest/DecaCallbacks.java b/app/src/main/java/com/example/nrftest/DecaCallbacks.java index 90049d2..bf7674a 100644 --- a/app/src/main/java/com/example/nrftest/DecaCallbacks.java +++ b/app/src/main/java/com/example/nrftest/DecaCallbacks.java @@ -10,61 +10,67 @@ public class DecaCallbacks implements DecaManagerCallbacks { @Override public void onDeviceConnecting(@NonNull BluetoothDevice device) { - Log.d(TAG, "onDeviceConnecting"); + Log.d("DecaCallbacks", "onDeviceConnecting"); } @Override public void onDeviceConnected(@NonNull BluetoothDevice device) { - Log.d(TAG, "onDeviceConnected"); + Log.d("DecaCallbacks", "onDeviceConnected"); } @Override public void onDeviceDisconnecting(@NonNull BluetoothDevice device) { - Log.d(TAG, "onDeviceDisconnecting"); + Log.d("DecaCallbacks", "onDeviceDisconnecting"); } @Override public void onDeviceDisconnected(@NonNull BluetoothDevice device) { - Log.d(TAG, "onDeviceDisconnected"); + Log.d("DecaCallbacks", "onDeviceDisconnected"); } @Override public void onLinkLossOccurred(@NonNull BluetoothDevice device) { - Log.d(TAG, "onLinkLossOccurred"); + Log.d("DecaCallbacks", "onLinkLossOccurred"); } @Override public void onServicesDiscovered(@NonNull BluetoothDevice device, boolean optionalServicesFound) { - Log.d(TAG, "onServicesDiscovered"); + Log.d("DecaCallbacks", "onServicesDiscovered"); } @Override public void onDeviceReady(@NonNull BluetoothDevice device) { - Log.d(TAG, "onDeviceReady"); + Log.d("DecaCallbacks", "onDeviceReady"); } @Override public void onBondingRequired(@NonNull BluetoothDevice device) { - Log.d(TAG, "onBondingRequired"); + Log.d("DecaCallbacks", "onBondingRequired"); } @Override public void onBonded(@NonNull BluetoothDevice device) { - Log.d(TAG, "onBonded"); + Log.d("DecaCallbacks", "onBonded"); } @Override public void onBondingFailed(@NonNull BluetoothDevice device) { - Log.d(TAG, "onBondingFailed"); + Log.d("DecaCallbacks", "onBondingFailed"); } @Override public void onError(@NonNull BluetoothDevice device, @NonNull String message, int errorCode) { - Log.d(TAG, "onError: " + message); + Log.d("DecaCallbacks", "onError: " + message); } @Override public void onDeviceNotSupported(@NonNull BluetoothDevice device) { - Log.d(TAG, "onDeviceNotSupported"); + Log.d("DecaCallbacks", "onDeviceNotSupported"); + } + + + @Override + public void onTagLocationData(String dataStr) { + } } diff --git a/app/src/main/java/com/example/nrftest/DecaManager.java b/app/src/main/java/com/example/nrftest/DecaManager.java index 47fab9e..baaab9f 100644 --- a/app/src/main/java/com/example/nrftest/DecaManager.java +++ b/app/src/main/java/com/example/nrftest/DecaManager.java @@ -7,6 +7,7 @@ import android.bluetooth.BluetoothGattService; import android.content.Context; import android.util.Log; +import java.io.ByteArrayOutputStream; import java.util.UUID; import androidx.annotation.NonNull; @@ -87,6 +88,14 @@ public class DecaManager extends BleManager { @Override public void onDataReceived(@NonNull BluetoothDevice device, @NonNull Data data) { Log.d(TAG, "onDataReceived: length=" + data.size() + " data=" + data); + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + for (int i = 0; i < data.size(); i++) { + stream.write(data.getByte(i)); + } + + mCallbacks.onTagLocationData(stream.toByteArray()); } @Override diff --git a/app/src/main/java/com/example/nrftest/DecaManagerCallbacks.java b/app/src/main/java/com/example/nrftest/DecaManagerCallbacks.java index dbedd0e..9e8a79b 100644 --- a/app/src/main/java/com/example/nrftest/DecaManagerCallbacks.java +++ b/app/src/main/java/com/example/nrftest/DecaManagerCallbacks.java @@ -2,6 +2,7 @@ package com.example.nrftest; import no.nordicsemi.android.ble.BleManagerCallbacks; -public interface DecaManagerCallbacks extends BleManagerCallbacks -{ +public interface DecaManagerCallbacks extends BleManagerCallbacks { + + void onTagLocationData(byte[] dataStr); } diff --git a/app/src/main/java/com/example/nrftest/MainActivity.java b/app/src/main/java/com/example/nrftest/MainActivity.java index 98a39de..6a843ee 100644 --- a/app/src/main/java/com/example/nrftest/MainActivity.java +++ b/app/src/main/java/com/example/nrftest/MainActivity.java @@ -10,9 +10,12 @@ import android.bluetooth.le.ScanSettings; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; + +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import java.util.List; @@ -35,15 +38,25 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); manager = new DecaManager(getApplicationContext()); - manager.setGattCallbacks(new DecaCallbacks()); + manager.setGattCallbacks(decaCallbacks); - Button clickButton = (Button) findViewById(R.id.button2); - clickButton.setOnClickListener( new View.OnClickListener() { + Button button1 = findViewById(R.id.btnScan); + button1.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { + initBluetooth(); DoScan(); } }); + + Button button2 = findViewById(R.id.btnConnect); + button2.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick(View v) { + initBluetooth(); + connectDirectly(); + } + }); } @Override @@ -55,7 +68,7 @@ public class MainActivity extends AppCompatActivity { bluetoothAdapter = null; } - private void DoScan() { + private void initBluetooth() { bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); bluetoothAdapter = bluetoothManager.getAdapter(); @@ -64,7 +77,9 @@ public class MainActivity extends AppCompatActivity { new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 42); } + } + private void DoScan() { // Scanning settings final ScanSettings settings = new ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) @@ -76,7 +91,20 @@ public class MainActivity extends AppCompatActivity { leScanner.startScan(null, settings, scanCallback); } - ScanCallback scanCallback = new ScanCallback() { + private void connectDirectly() { + device = bluetoothAdapter.getRemoteDevice("D1:6C:7A:99:57:71"); + + connectToDevice(device); + } + + private void connectToDevice(BluetoothDevice device) { + manager.connect(device) + .retry(3, 100) + .useAutoConnect(false) + .enqueue(); + } + + final ScanCallback scanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { @@ -87,10 +115,7 @@ public class MainActivity extends AppCompatActivity { leScanner.stopScan(scanCallback); - manager.connect(device) - .retry(3, 100) - .useAutoConnect(false) - .enqueue(); + connectToDevice(device); } } @@ -110,4 +135,75 @@ public class MainActivity extends AppCompatActivity { Toast.makeText(getApplicationContext(), "Scan failed with code: " + errorCode, LENGTH_LONG).show(); } }; + + + final DecaManagerCallbacks decaCallbacks = new DecaManagerCallbacks(){ + + + @Override + public void onTagLocationData(byte[] data) { + + } + + @Override + public void onDeviceConnecting(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onDeviceConnecting"); + } + + @Override + public void onDeviceConnected(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onDeviceConnected"); + } + + @Override + public void onDeviceDisconnecting(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onDeviceDisconnecting"); + } + + @Override + public void onDeviceDisconnected(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onDeviceDisconnected"); + } + + @Override + public void onLinkLossOccurred(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onLinkLossOccurred"); + } + + @Override + public void onServicesDiscovered(@NonNull BluetoothDevice device, boolean optionalServicesFound) { + Log.d("DecaCallbacks", "onServicesDiscovered"); + } + + @Override + public void onDeviceReady(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onDeviceReady"); + } + + @Override + public void onBondingRequired(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onBondingRequired"); + } + + @Override + public void onBonded(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onBonded"); + } + + @Override + public void onBondingFailed(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onBondingFailed"); + } + + @Override + public void onError(@NonNull BluetoothDevice device, @NonNull String message, int errorCode) { + Log.d("DecaCallbacks", "onError: " + message); + } + + @Override + public void onDeviceNotSupported(@NonNull BluetoothDevice device) { + Log.d("DecaCallbacks", "onDeviceNotSupported"); + } + + }; } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 61f528f..3d26e9f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,12 +7,22 @@ tools:context=".MainActivity">