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">
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/example/nrftest/ExampleUnitTest.java b/app/src/test/java/com/example/nrftest/ExampleUnitTest.java
deleted file mode 100644
index 9deb949..0000000
--- a/app/src/test/java/com/example/nrftest/ExampleUnitTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.example.nrftest;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
- @Test
- public void addition_isCorrect() {
- assertEquals(4, 2 + 2);
- }
-}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index b3908aa..1487463 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -12,7 +12,3 @@ org.gradle.jvmargs=-Xmx1536m
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
-
-
-android.enableJetifier=true
-android.useAndroidX=true
\ No newline at end of file