Какой UUID должен быть выбран для подключения Bluetooth на Android

#java #android #sockets #bluetooth #rfcomm

#java #Android #сокеты #bluetooth #rfcomm

Вопрос:

На данный момент я разрабатываю новое приложение для Android. Мне требуется Bluetooth для этого приложения. Каждый раз, когда я хочу подключить два (сопряженных) устройства через систему serversocket / socket, я не могу создать рабочий сокет. Он всегда возвращает:

 java.io.IOException: read failed, socket might closed or timeout, read ret: -1
  

Итак, мой вопрос: использую ли я недопустимый UUID? Если это не так. У вас есть какие-либо другие предложения, что может быть не так?

 public Accept(BluetoothAdapter bt, BluetoothDevice device, Context context) {
            try {
                BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                BluetoothServerSocket tmp = null;
                try {
                    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423");
    //Here is the point when it doesn't work...
                    tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid);
                } catch (Exception e) {
                }
                mmServerSocket = tmp;

                bt_device = device;
            } catch (Exception e) {
            }
        }
  

Заранее спасибо за вашу помощь.

Ответ №1:

Я думаю, вам не хватает инструкции accept здесь. После прослушивания вашим следующим заявлением должно быть tmp.accept(). Это решит вашу проблему. Итак, ваш код должен выглядеть следующим образом:

     try { 
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423"); 
Bluetoothsocket clientSocket;
//Here is the point when it doesn't work... 
tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); 
clientSocket = tmp.accept();
}
  

Кроме того, здесь следует отметить одну вещь, принять вызов функции — это блокирующий код.

Надеюсь, это поможет.

Комментарии:

1. Прежде всего: Спасибо за ваш ответ. Но мне жаль говорить, что это не решило мою проблему. Я, вероятно, не дал вам достаточно кода. Мой код в основном похож на тот, который вы можете увидеть здесь: ссылка , поэтому я обрабатываю его как поток. И я вызываю метод accept() в методе run() этого потока.

2. Но как только я вызываю этот метод bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); канал thr serversocket равен -1, поэтому я думаю, что это должно быть проблемой с этим методом?

3. Ооо.. Извините, я не знал вашего полного кода… Теперь первое, что вы можете сделать здесь, это проверить код ошибки / исключение, возвращаемое функцией прослушивания. Это поможет нам понять причину ошибки. Поскольку я прочитал предоставленную вами ссылку, listen может выдавать исключение только в этих случаях «по ошибке, например, Bluetooth недоступен, или недостаточно разрешений, или используемый канал «.

4. Кроме того, можете ли вы попробовать этот UUID: 00001101-0000-1000-8000-00805F9B34FB

5. Я так рад сообщить, что мне каким-то образом удалось решить мою проблему.. К сожалению, я не могу точно сказать вам, как мне это удалось.. Но я действительно хочу поблагодарить вас за все время, которое вы потратили на меня. Большое вам спасибо. В случае, если у меня возникнет другая проблема с моим приложением Bluetooth, я снова спрошу вас, все ли у вас в порядке, еще раз: большое спасибо.