Intereting Posts
Могу ли я изменить свое местоположение на Android-картах? Передача объектов в фрагменты Попытка исправить андроиды «плохое или ошибочное использование основного класса» пошло плохо Установить подсказку поиска динамически Как планировать задачу с помощью диспетчера аварийных сигналов Не удается загрузить веб-страницу с помощью WebView на Android Как получить кнопку «Далее» на экранной клавиатуре Android вместо кнопки «Go» в телефонной запинке Cordova / Phonegap Android – проблема Java / Ant при сборке? Как часто вы можете обновлять текст без беспорядка Как реализовать однократную отмену изменений SQLite DB? Проблемы с совместным текстом и изображением с SHARE INTENT на Twitter XML против JSON. Какой из них лучше хранить небольшую часть данных? Ручное раздувание пользовательского представления дает разные макеты для пользовательского вида ActionBar ProcessReleaseResources Как использовать самоподписанный SSL в сетевой библиотеке Android (ION)?

Как написать последовательную характеристику быстро и стабильно для BLE в Android?

Я разрабатываю BLE в Android, я могу сканировать, подключать и писать характеристики для устройства BLE.

Я вызываю следующую функцию для передачи BluetoothGatt и characteristic AsyncTask при нажатии Button .

 write_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new WriteCharacteristic(mBluetoothGatt , HueCharacteristic).execute(); } }); 

Код характеристики записи выглядит следующим образом:

 private class WriteCharacteristic extends AsyncTask<String, Void, String> { public BluetoothGatt mGatt; public BluetoothGattCharacteristic mCharacteristic; public WriteCharacteristic(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){ mGatt = gatt; mCharacteristic = characteristic; } @Override protected String doInBackground(String... urls) { mGatt.writeCharacteristic(mCharacteristic); return null; } } 

Но я пытаюсь нажать кнопку последовательно, кажется, что Android не записывал каждую characteristic устройства BLE .

Если я нажимаю кнопку последовательно в течение 5 раз, это будет потерять 1 ~ 3 раза. Он только два раза записывает characteristic устройства BLE .

Вопрос:

Is there any better way to write characteristic consecutive and stable to BLE device for Android?

Solutions Collecting From Web of "Как написать последовательную характеристику быстро и стабильно для BLE в Android?"

Система записи / записи в стеке Bluetooth Android не подходит для очередей нескольких операций. Вам нужно дождаться завершения операций перед отправкой по другому. Кроме того, поскольку ваш код использует AsyncTask , вы получите параллельное выполнение задач на некоторых устройствах, поэтому даже запросы не сериализуются, когда вы нажимаете кнопку.

Чтобы получить стабильные результаты из фреймворка, вам нужно будет поставить очередь этих запросов самостоятельно и дождаться, когда BluetoothGattCallback onCharacteristicWrite() запускается перед отправкой следующей команды. Вашему коду необходимо синхронизировать весь доступ к объекту GATT, чтобы следующий writeCharacteristic() никогда не writeCharacteristic() до тех пор, пока обратный вызов завершения не завершится для предыдущего запроса.