Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/38: Рейтинг темы: голосов - 38, средняя оценка - 4.92
Evgeny_
0 / 0 / 0
Регистрация: 03.09.2013
Сообщений: 9
1

Передача данных по Bluetooth

04.09.2013, 11:51. Просмотров 6981. Ответов 4
Метки нет (Все метки)

Проблема в следующем, после определенного количества переданных байт(зависит от телефона, на huawei ~ 500, на nexus 4 ~ 1700) от Андроида к Ардуино передача обрывается, и приложение зависает после чего вылетает.
Вопрос заключается в том, как это исправить, такое ощущение, что перполняется буфер, но методов его очистки я не нашел. Пробовал
Java
1
OutputStream.flush();
не помогло
Передачу и подключение делаю через отдельный поток:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class ConnectedThread extends Thread{
 
    BluetoothAdapter bluetooth1;
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    
    BluetoothSocket clientSocket;
    
    private  BluetoothSocket mmSocket;
    private OutputStream mmOutStream;
    OutputStream tmpOut = null;
 
        private static final String TAG = "bluetooth1";
    public ConnectedThread()
    {
        bluetooth1 = BluetoothAdapter.getDefaultAdapter();
         bluetooth1.enable();
        BluetoothDevice device = bluetooth1.getRemoteDevice("00:13:02:01:72:69");
    
      try {
          mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
          
        }
      bluetooth1.cancelDiscovery();
    
       try
       {
        mmSocket.connect();  
       }
       catch(IOException e)
       {}
       try {
           tmpOut = mmSocket.getOutputStream();
         
       } catch (IOException e) { }
       mmOutStream = tmpOut;
   }
    public void write(String message) {
            Log.d(TAG, "...Данные для отправки: " + message + "...");
         byte[] msgBuffer = message.getBytes();
            try {
                mmOutStream.write(msgBuffer);
                }
            } 
            catch (IOException e) {
                Log.d(TAG, "...Ошибка отправки данных: " + e.getMessage() + "...");     
              }
            }
             }
Соединение между Arduino и Android устанавливается по нажатию на кнопку следующим образом:
Java
1
2
 mConnectedThread = new ConnectedThread();
        mConnectedThread.start();
Само сообщение отправляется по событию изменения значения ProgressBar - onProgressChanged
Java
1
2
3
         public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
mConnectedThread.write("48"); }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 11:51
Ответы с готовыми решениями:

Передача данных по Bluetooth
Добрый день! Нужна помощь. Я относительно недавно начал изучать...

Передача данных через bluetooth
сразу скажу я новичок в программировании так что не судите строго о моем...

Передача данных Android устр. - stm по bluetooth
Здравствуйте, есть задача передавать данные с android планшета на на плату с...

Передача файлов через BlueTooth OPP / ContentResolver
Друзья, помогите пожалуйста!!! Уже второй день пляшу с бубном. :( Передаю...

Приём данных по Bluetooth
Из Arduino посылается строка xx|xx|xx|xx|xx,xxxx|\n, где х-любое число. На...

4
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
04.09.2013, 12:38 2
А у вас случайно в буфер приема инпутстрима ничего не попадает? Возможно он вызывает переполнение.
1
Evgeny_
0 / 0 / 0
Регистрация: 03.09.2013
Сообщений: 9
04.09.2013, 12:43  [ТС] 3
Нет, с ним пока что не работаю
0
Evgeny_
0 / 0 / 0
Регистрация: 03.09.2013
Сообщений: 9
20.09.2013, 15:49  [ТС] 4
Цитата Сообщение от korsaj Посмотреть сообщение
А у вас случайно в буфер приема инпутстрима ничего не попадает? Возможно он вызывает переполнение.
Да, действительно, оказалось, что ардуино посылает байты в ответ, а инпустрим у меня никак не обрабатывался, вследствие чего и возникала ошибка. Спасибо.
0
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 539
20.09.2013, 19:53 5
Незачто
0
20.09.2013, 19:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 19:53

Получение данных от Bluetooth
Доброго времени суток, помогите разобраться, не получается отделить мух от...

Получение и разбор данных по Bluetooth
Всем привет. Очень нужна помощь, не могу найти решение. Задача такова, что с...

Как сделать передачу данных по bluetooth
Создал приложение на телефон, которые отправляет на моего домашнего робота "1",...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru