Bluetooth LE (hm-10): ошибка чтения, возможно, сокет закрыт или тайм-аут

Вот краткая информация:

Я хочу подключиться к модулям bluetooth hm-10 через bluetoothLE, а затем распечатать полученные данные из модуля в приложение 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 ()

Ошибка:

ошибка чтения, сокет может быть закрыт или тайм-аут, прочитайте ret: -1

0 ответов

Другие вопросы по тегам