Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Kapo
2 / 2 / 1
Регистрация: 03.05.2014
Сообщений: 63
1

Android. Краш приложения при подключении по bluetooth

08.09.2019, 12:25. Просмотров 222. Ответов 1

Доброго времени суток. Необходимо написать приложение-клиент для андроида, для подключения его к компу с ОС Linux, а в дальнейшем к Raspberry. Для Linux запускаю скрипт сервера из примеров pyBluez на Python, запускается без проблем и вроде даже работает. С Андроидом вот уже четыре дня колдую, и результатов мало.
Вот что происходит в андроиде. Поиск устройств поблизости работает, необходимое устройство находит. Сокет создается, но в момент socket.connect(), приложение крашится, но, что самое интересное, и телефон и комп успевают добавить друг друга в сопряженные. Пытался отловить эту ошибку по Throwable, но не получилось, такое ощущение что это ошибка виртуальной машины, а не кода. UUID использую одинаковый и на сервере и на клиенте. Может быть пропустил какую то настройку, или может есть какая то тонкость с новыми версиями андроида, как например запрос на разрешение местоположения для поиска устройств (целый день убил на это ).

Вот код класса с созданием сокета и подключением. Вот на этой строке mmSocket.connect(); и происходит краш, но только в том случае, когда устройства НЕ сопряжены. Если же они сопряжены, краша нет и на этой строке отлавливается ошибка "read failed, socket might closed or timeout, read ret: -1"
В public ConnectThread, есть куски закомментированного кода, думаю поймете, это варианты, которые пробовал до этого. Результат одинаковый, разницы нет.
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
private class ConnectThread extends Thread {
        private final BluetoothSocket mmSocket;
        private final BluetoothDevice mmDevice;
 
        public ConnectThread(BluetoothDevice device) {
            // Use a temporary object that is later assigned to mmSocket
            // because mmSocket is final.
            BluetoothSocket tmp = null;
            mmDevice = device;
 
            try {
                // Get a BluetoothSocket to connect with the given BluetoothDevice.
                // MY_UUID is the app's UUID string, also used in the server code.
//                tmp = device.createRfcommSocketToServiceRecord(/*UUID.fromString(BASE_UUID) */UUID.fromString(device.getUuids()[0].toString()));
                tmp =(BluetoothSocket) device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}).invoke(device,1);
                //Toast.makeText(MainActivity.this, "YES!!!!", Toast.LENGTH_LONG).show();
            } /*catch (IOException e) {
                Toast.makeText(MainActivity.this, "NO!!!!", Toast.LENGTH_LONG).show();
                Log.e(TAG, "Socket's create() method failed", e);
            }*/
            catch (Throwable e)
            {
 
            }
            mmSocket = tmp;
        }
 
        public void run() {
            // Cancel discovery because it otherwise slows down the connection.
            Toast.makeText(MainActivity.this, "Run - " + bluetooth.cancelDiscovery(), Toast.LENGTH_SHORT).show();
//            bluetooth.cancelDiscovery();
 
            try
            {
                // Connect to the remote device through the socket. This call blocks
                // until it succeeds or throws an exception.
//                Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_SHORT).show();
                mmSocket.connect();
            }
            catch (IOException connectException)
            {
                // Unable to connect; close the socket and return.
                Toast.makeText(getApplicationContext(), "err 1 " + connectException.getMessage(), Toast.LENGTH_LONG).show();
                try
                {
                    mmSocket.close();
                }
                catch (IOException closeException)
                {
                    Log.e(TAG, "Could not close the client socket", closeException);
                }
                return;
            }
            catch(Exception exp)
            {
                Toast.makeText(getApplicationContext(), "Err: " + exp.toString(), Toast.LENGTH_SHORT).show();
            }
 
            // The connection attempt succeeded. Perform work associated with
            // the connection in a separate thread.
            manageMyConnectedSocket(mmSocket);
        }
 
        // Closes the client socket and causes the thread to finish.
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) {
                Log.e(TAG, "Could not close the client socket", e);
            }
        }
    }
P.S. Если нужны другие части кода или весь проект, пишите, буду выкладывать. Хочу уже разобраться с этой х...ю и продолжить дальше. Даже мысли не было что так долго на этом зависну. И что самое главное, нормальной информации в сети почти нет, даже на буржуйских сайтах ни чего толком найти не могу.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2019, 12:25
Ответы с готовыми решениями:

Ошибка при подключении GIT к Android Studio
Добрый день. При подключению Git к проекту выскакивает такая ошибка Invalid VCS root mapping...

Обновление данных ListView при подключении к сети WiFi Android
Написал приложение для получения курса валют с сайта РБК. Все работает кроме обновления данных...

Ошибки при подключении HollyViewPager – Android Navigation Animation Library на андроид
Доброго времени суток, нашел классную, на мой взгляд, библиотеку навигации на андройд. Но к...

Краш приложения
Здравствуйте! Решил научиться делать приложения для андройд. Через SDK Manager установил пакеты...

Краш Windows при завершении приложения
Создаю окно в полноэкранном режиме, приложение работает нормально, но при завершении крашится...

1
ExFau$t
924 / 733 / 217
Регистрация: 08.05.2012
Сообщений: 3,534
08.09.2019, 22:04 2
В студии вкладка logcat.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2019, 22:04

Падает роутер при просмотре с YouTube при подключении bluetooth наушников
Доброго времени суток друзья, и с новым 2016 годом!!! Я проживаю в Казахстане, у меня подключен ID...

Краш приложения при нажатии узла Treeview
Точнее не совсем стандартный Treeview, а пользовательский элемент управления ThreeStateTreeview...

Ошибка при подключении к самому себе по bluetooth клиенту
Доброго времени суток!У меня стоит python 2.7.13,pybluez 0.22; Вот мой код:from bluetooth import *...


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

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

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