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