diff --git a/app/src/main/java/com/example/sensortestingapp/MainActivity.kt b/app/src/main/java/com/example/sensortestingapp/MainActivity.kt
index cdebebe..d0d7cf4 100644
--- a/app/src/main/java/com/example/sensortestingapp/MainActivity.kt
+++ b/app/src/main/java/com/example/sensortestingapp/MainActivity.kt
@@ -6,12 +6,16 @@ import android.app.Activity
import android.app.AlertDialog
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
+import android.bluetooth.le.ScanCallback
+import android.bluetooth.le.ScanResult
+import android.bluetooth.le.ScanSettings
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
+import android.util.Log
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
@@ -47,11 +51,27 @@ class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
+ private val scanSettings = ScanSettings.Builder()
+ .setScanMode(ScanSettings.SCAN_MODE_BALANCED)
+ .build()
+
private val bluetoothAdapter: BluetoothAdapter by lazy {
val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
bluetoothManager.adapter
}
+ private val bleScanner by lazy {
+ bluetoothAdapter.bluetoothLeScanner
+ }
+
+ private var isScanning = false
+ set(value) {
+ field = value
+ runOnUiThread {
+ binding.fab.setText(if (value) "Stop Scan" else "Start Scan")
+ }
+ }
+
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
@@ -66,7 +86,11 @@ class MainActivity : AppCompatActivity() {
setupActionBarWithNavController(navController, appBarConfiguration)
binding.fab.setOnClickListener { view ->
- startBleScan()
+ if (!isScanning) {
+ startBleScan()
+ } else {
+ stopBleScan()
+ }
// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
// .setAnchorView(R.id.fab)
// .setAction("Action", null).show()
@@ -159,13 +183,34 @@ class MainActivity : AppCompatActivity() {
}
}
+ @SuppressLint("MissingPermission")
+ val scanCallback = object : ScanCallback() {
+ override fun onScanResult(callbackType: Int, result: ScanResult) {
+ with(result.device) {
+ Log.i(
+ "ScanCallback",
+ "Found BLE device! Name: ${name ?: "Unnamed"}, address: $address"
+ )
+ }
+ }
+ }
+
+ @SuppressLint("MissingPermission")
private fun startBleScan() {
if (!hasRequiredRuntimePermissions()) {
requestRelevantRuntimePermissions()
- } else { /* TODO: Actually perform scan */
+ } else {
+ bleScanner.startScan(null, scanSettings, scanCallback)
+ isScanning = true
}
}
+ @SuppressLint("MissingPermission")
+ private fun stopBleScan() {
+ bleScanner.stopScan(scanCallback)
+ isScanning = false
+ }
+
private fun Activity.requestRelevantRuntimePermissions() {
if (hasRequiredRuntimePermissions()) {
return
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 406189e..1a76c83 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -21,13 +21,14 @@
-
\ No newline at end of file