С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 5

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

21.11.2017, 09:53. Показов 3128. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Нужна помощь. Я относительно недавно начал изучать программирование под Android, да и программирование на Java всецело.
Почитав книг и посмотрев различные статьи по данной теме сделал простенькое приложение для отправки данных по синезубу из андроида на ардуино.
После этого захотел сделать чтоб сервопривод управлялся не кнопками, а джойстиком. Поискав на GitHub взял там исходники джойстика, так как сам еще не способен реализовать, и добавил туда передачу данных по синезубу.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.widget.Toast;
 
 
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
 
import io.github.controlwear.virtual.joystick.android.JoystickView;
 
public class MainActivity extends Activity {
 
    public static final String TAG = "bluetooth";
 
    private TextView mTextViewAngleLeft;
    private TextView mTextViewStrengthLeft;
 
    private TextView mTextViewAngleRight;
    private TextView mTextViewStrengthRight;
 
    int y;
 
    private static final int REQUEST_ENABLE_BT = 1;
    private BluetoothAdapter btAdapter = null;
    private BluetoothSocket btSocket = null;
 
    private ConnectedThread wdt;
    
    // SPP UUID сервиса
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
 
    // MAC-адрес Bluetooth модуля
    private static String address = "20:16:06:12:98:22";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btAdapter = BluetoothAdapter.getDefaultAdapter();      
        checkBTState();
 
        mTextViewAngleLeft = (TextView) findViewById(R.id.textView_angle_left);
        mTextViewStrengthLeft = (TextView) findViewById(R.id.textView_strength_left);
 
        JoystickView joystickLeft = (JoystickView) findViewById(R.id.joystickView_left);
 
        joystickLeft.setOnMoveListener(new JoystickView.OnMoveListener() {
            @Override
            public void onMove(int angle, int strength) {
                mTextViewAngleLeft.setText(angle + "°");
                mTextViewStrengthLeft.setText(strength + "%");
 
                if (angle > 180) {
                    y = 360-angle;
                } else {
                    y = angle;
                }
                wdt.write("S3:"+ y +"/");
            }
        });
        
        mTextViewAngleRight = (TextView) findViewById(R.id.textView_angle_right);
        mTextViewStrengthRight = (TextView) findViewById(R.id.textView_strength_right);
 
        JoystickView joystickRight = (JoystickView) findViewById(R.id.joystickView_right);
        joystickRight.setOnMoveListener(new JoystickView.OnMoveListener() {
            @Override
            public void onMove(int angle, int strength) {
                mTextViewAngleRight.setText(angle + "°");
                mTextViewStrengthRight.setText(strength + "%");
 
                if (angle > 180) {
                    y = 360-angle;
                } else {
                    y = angle;
                }
                wdt.write("S2:"+ y +"/");
            }
        });
    }
 
    @Override
    public void onResume() {
        super.onResume();
 
        Log.d(TAG, "...onResume - попытка соединения...");
        
        BluetoothDevice device = btAdapter.getRemoteDevice(address);
        
        try {
            btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
        }
        
        btAdapter.cancelDiscovery();
        
        Log.d(TAG, "...Соединяемся...");
        try {
            btSocket.connect();
            Log.d(TAG, "...Соединение установлено и готово к передачи данных...");
        } catch (IOException e) {
            try {
                btSocket.close();
            } catch (IOException e2) {
                errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
            }
        }
        
        Log.d(TAG, "...Создание Socket...");
 
        wdt = new ConnectedThread(btSocket);
        wdt.start();
    }
 
    @Override
    public void onPause() {
        super.onPause();
 
        Log.d(TAG, "...In onPause()...");
 
        try     {
            btSocket.close();
        } catch (IOException e2) {
            errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
        }
    }
 
    private void checkBTState() {
        if(btAdapter==null) {
            errorExit("Fatal Error", "Bluetooth не поддерживается");
        } else {
            if (btAdapter.isEnabled()) {
                Log.d(TAG, "...Bluetooth включен...");
            } else {
                Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
            }
        }
    }
 
    private void errorExit(String title, String message){
        Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
        finish();
    }
 
    private class ConnectedThread extends Thread {
 
        private final BluetoothSocket mmSocket;
        private final OutputStream mmOutStream;
 
        public ConnectedThread(BluetoothSocket socket) {
            mmSocket = socket;
            OutputStream tmpOut = null;
            
            try {
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }
 
            mmOutStream = tmpOut;
        }
 
        public void run() {
 
        }
 
        /* Call this from the main activity to send data to the remote device */
        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() + "...");
            }
        }
 
        /* Call this from the main activity to shutdown the connection */
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) { }
        }
    }
}
И собственно проблема в том, что приложение работает секунд 10 и после этого передача обрывается. Я так понимаю проблема в переполнении буфера данных, но как реализовать его очистку не нашел...
Прошу помочь разобраться в данной проблеме. Буду рад любой помощи.
Извиняюсь если не правильно оформил тему.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2017, 09:53
Ответы с готовыми решениями:

Передача данных по Bluetooth
Проблема в следующем, после определенного количества переданных байт(зависит от телефона, на huawei ~ 500, на nexus 4 ~ 1700) от Андроида...

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

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

3
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 5
23.11.2017, 08:25  [ТС]
Видимо ни у кого похожего не было, печально...
Пока ответов нет изложу другую идею.
Пытался провернуть отправку с паузами Threed.sleep и TimeUnit.SECOND.sleep.
Если ставлю паузу в 3 секунды именно на отправку из public void write то подвисает, причем значительно, само приложение...Однако отправка хоть и криво но идет.
Исходя из этого возник еще вопрос: не знаю как точно, но возможно ли через Handler реализовать отправку и сделать паузу именно на отправку из Handler'a?
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
23.11.2017, 10:06
может стоит синхронизировать методы работающие с RfcommSocket?

Добавлено через 1 минуту
Java
1
public synchronized  void write(String message) {
0
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 5
12.12.2017, 09:38  [ТС]
Вопрос можно закрыть. Проблему давно исправил, сделал через Handler.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2017, 09:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru