Вот краткое описание:
Я хочу подключиться к модулям Bluetooth hm-10 через Bluetooth, а затем распечатать полученные данные из модуля в приложение android.
здесь моя основная деятельность:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
blManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
blAdapter = blManager.adapter
//enable bl
if (blAdapter == null || !blAdapter.isEnabled) {
startActivityForResult(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 12)
}
// starting search
val intentFilter = IntentFilter(BluetoothDevice.ACTION_FOUND)
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)
registerReceiver(broadcastReceiver, intentFilter)
blAdapter.startDiscovery()
}
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val action = intent?.action
if (action == BluetoothDevice.ACTION_FOUND) {
val device =
intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)
if (!scannedDevices.contains(device!!) && device.name != null) {
scannedDevices.add(device)
listView.adapter = ArrayAdapter(
this@MainActivity,
R.layout.support_simple_spinner_dropdown_item,
scannedDevices
)
listView.setOnItemClickListener { adapterView: AdapterView<*>, view1: View, i: Int,
l: Long ->
blAdapter.cancelDiscovery()
scannedDevices[i].connectGatt(
this@MainActivity,
false,
bluetoothGattCallback
)
}
}
} else if (action == BluetoothAdapter.ACTION_DISCOVERY_FINISHED) {
displayData()
}
}
val bluetoothGattCallback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) {
super.onConnectionStateChange(gatt, status, newState)
val intentAction: String
if (newState == BluetoothProfile.STATE_CONNECTED) {
bluetoothGatt = gatt!!
bluetoothGatt.discoverServices()
}
}
override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
try {
val result = ConnectAsynkTask(
blAdapter,
gatt?.device!!,
this@MainActivity,
this@MainActivity
).execute(gatt.device.address)
} catch (ex: Exception) {
ex.printStackTrace()
}
}
}
ConnectAsynkTask:
override fun doInBackground(vararg params: String?): Boolean {
val uuid: UUID = UUID.fromString("00001800-0000-1000-8000-00805f9b34fb")
bluetoothDevice = btAdapter.getRemoteDevice(params[0]);
return try {
bluetoothDevice.createInsecureRfcommSocketToServiceRecord(uuid).connect()
true;
} catch (e: Exception) {
e.printStackTrace();
false;
}
}
я подключусь к модулю с помощью connectGatt, но я хочу создать сокет-соединение с этим для прослушивания данных inputStream.
сбой в ConnectAsynkTask Строка:
bluetoothDevice.createInsecureRfcommSocketToServiceRecord (uuid) .connect ()
Ошибка:
чтение не удалось, сокет может быть закрыт или истекло время ожидания, чтение: -1