Точнее задача: нужно получать через колбэк bt-устройство и уже с ним работать, но на такой изи задаче что то застрял. Никогда не удавалась работать с блютузом, буду благодарен в любом участии в вопросе!
Вот класс с логикой:
package com.arturprgr.meshmessenger.manager
import android.Manifest
import android.app.Activity
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanResult
import android.content.Context
import android.content.pm.PackageManager
import android.widget.Toast
import androidx.core.app.ActivityCompat
class MeshManager(private val context: Context) {
private var btAdapter: BluetoothAdapter? = null
private val message = mutableListOf<Pair<String, String>>()
fun tryConnectToDevice() {
if (btAdapter == null) {
val service = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
btAdapter = service.adapter
}
if (btAdapter?.isEnabled == true) {
if (ActivityCompat.checkSelfPermission(
context, Manifest.permission.BLUETOOTH_SCAN
) != PackageManager.PERMISSION_GRANTED
) ActivityCompat.requestPermissions(
context as Activity,
arrayOf(Manifest.permission.BLUETOOTH_SCAN),
1
)
} else return
Toast.makeText(context, "Scan", Toast.LENGTH_LONG).show()
btAdapter?.bluetoothLeScanner?.startScan(object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
super.onScanResult(callbackType, result)
Toast.makeText(context, "${result.device.address}", Toast.LENGTH_LONG).show()
}
})
}
fun sendMessage(targetDeviceId: String, message: String) {
this.message.add(targetDeviceId to message)
tryConnectToDevice()
}
}
Вот код активности:
package com.arturprgr.meshmessenger
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.arturprgr.meshmessenger.databinding.ActivityMainBinding
import com.arturprgr.meshmessenger.manager.MeshManager
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var meshManager: MeshManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
meshManager = MeshManager(this@MainActivity)
enableEdgeToEdge()
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
meshManager.tryConnectToDevice()
}
}