From 013553e119d97f6203c110f386e070bf758eae3c Mon Sep 17 00:00:00 2001 From: Greisa Ajdini <greisa.ajdini@bytebuzzer.com> Date: Fri, 20 Jan 2023 06:35:21 +0100 Subject: [PATCH] nearest beacon setup --- .../main/java/com/tooz/woodz/BaseActivity.kt | 53 +++++++++++++------ .../main/java/com/tooz/woodz/MainActivity.kt | 20 +++---- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/tooz/woodz/BaseActivity.kt b/app/src/main/java/com/tooz/woodz/BaseActivity.kt index 42d5a40..02aa3e1 100644 --- a/app/src/main/java/com/tooz/woodz/BaseActivity.kt +++ b/app/src/main/java/com/tooz/woodz/BaseActivity.kt @@ -4,19 +4,19 @@ import android.Manifest import android.app.Activity import android.app.AlertDialog import android.bluetooth.BluetoothAdapter +import android.bluetooth.BluetoothDevice import android.bluetooth.BluetoothManager import android.bluetooth.le.ScanCallback +import android.bluetooth.le.ScanFilter import android.bluetooth.le.ScanResult import android.bluetooth.le.ScanSettings import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.os.Build -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle -import android.util.Log import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import org.altbeacon.beacon.BeaconManager @@ -26,7 +26,11 @@ private const val LOCATION_PERMISSION_REQUEST_CODE = 2 abstract class BaseActivity : AppCompatActivity() { + private var addresses = arrayOf("AC:23:3F:88:10:51", "AC:23:3F:88:10:53", "AC:23:3F:88:10:57") private var beaconManager: BeaconManager? = null + private var filters: MutableList<ScanFilter> = mutableListOf() + private val scanResults = mutableListOf<ScanResult>() + var nearestBeacon: BluetoothDevice? = null private var isScanning = false @@ -43,13 +47,9 @@ abstract class BaseActivity : AppCompatActivity() { bluetoothManager.adapter } - val isLocationPermissionGranted + private val isLocationPermissionGranted get() = hasPermission(Manifest.permission.ACCESS_FINE_LOCATION) - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - } - override fun onResume() { super.onResume() if (checkPermissions()) { @@ -86,7 +86,11 @@ abstract class BaseActivity : AppCompatActivity() { if (isLocationPermissionGranted) { return } - if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)){ + if (!ActivityCompat.shouldShowRequestPermissionRationale( + this, + Manifest.permission.ACCESS_FINE_LOCATION + ) + ) { val alertDialogBuilder = AlertDialog.Builder(this) alertDialogBuilder.setTitle(R.string.location_permission_alert_title) alertDialogBuilder.setMessage(R.string.location_permission_alert_message) @@ -103,23 +107,38 @@ abstract class BaseActivity : AppCompatActivity() { private val scanCallback = object : ScanCallback() { override fun onScanResult(callbackType: Int, result: ScanResult) { - Log.i("ScanCallBack", result.device.toString()) - with(result.device) { - Log.i("ScanCallback", "Found BLE device! Name: ${name ?: "Unnamed"}, address: $address $") - } + scanResults.add(result) + scanResults.sortByDescending { it.rssi } + nearestBeacon = scanResults[0].device +// Log.i("ScanCallback",scanResults[0].toString()) +// with(result.device) { +// Log.i( +// "ScanCallback", +// "Found BLE device! Name: ${name ?: "Unnamed"}, address: $address ${result.rssi} $" +// ) +// } } } private fun doBleScan() { //todo delete - Toast.makeText(this, "heyyyyy", - Toast.LENGTH_SHORT).show() + Toast.makeText( + this, "hey", + Toast.LENGTH_SHORT + ).show() + + scanResults.clear() + + for (i in addresses.indices) { + val filter = ScanFilter.Builder().setDeviceAddress(addresses[i]).build() + filters.add(filter) + } + bleScanner.startScan(filters, scanSettings, scanCallback) isScanning = true - bleScanner.startScan(null, scanSettings, scanCallback) } - fun Context.hasPermission(permissionType: String): Boolean { + private fun Context.hasPermission(permissionType: String): Boolean { return ContextCompat.checkSelfPermission(this, permissionType) == PackageManager.PERMISSION_GRANTED } diff --git a/app/src/main/java/com/tooz/woodz/MainActivity.kt b/app/src/main/java/com/tooz/woodz/MainActivity.kt index cc846a4..cc19c3f 100644 --- a/app/src/main/java/com/tooz/woodz/MainActivity.kt +++ b/app/src/main/java/com/tooz/woodz/MainActivity.kt @@ -25,21 +25,21 @@ class MainActivity : BaseActivity() { val navHostFragment = supportFragmentManager .findFragmentById(R.id.nav_fragment) as NavHostFragment navController = navHostFragment.navController - val bottomNavigationView = findViewById<BottomNavigationView - >(R.id.bottom_navigation_view) + val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view) setupActionBarWithNavController(navController) bottomNavigationView.setupWithNavController(navController) - val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> - when (item.itemId) { - R.id.camera -> { - val intent = Intent(this, BarcodeScannerActivity::class.java) - startActivity(intent) - return@OnNavigationItemSelectedListener true + val mOnNavigationItemSelectedListener = + BottomNavigationView.OnNavigationItemSelectedListener { item -> + when (item.itemId) { + R.id.camera -> { + val intent = Intent(this, BarcodeScannerActivity::class.java) + startActivity(intent) + return@OnNavigationItemSelectedListener true + } } + false } - false - } bottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) } -- GitLab