Я пытаюсь создать базовое приложение bluetooth для тестирования устройства.
Я получил код от разработчика. Вот ссылка: http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices
Вот часть моего кода потока:
public void run() { mBluetoothAdapter.cancelDiscovery(); Log.i(TAG, "Discovery Cancel!"); try { Log.i(TAG, "Connection Started"); mmSocket.connect(); Log.i(TAG, "Connection Ended"); } catch (IOException e) { try { Log.e(TAG, "Connection Failed", e); mmSocket.close(); } catch (IOException e2) { Log.e(TAG, "Connection Close Failed", e2); } return; }
Что бы я ни попробовал mmSocket.connect();
Никогда не работает. Всегда выдает исключение IOException, и я получаю этот журнал из моего логарифма:
java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)
Я просмотрел эти статьи и попытался написать письменные вещи, ни одна из них не решила мою проблему.
Android Bluetooth: обнаружено обнаружение службы, подключение к настольному компьютеру / ноутбуку
Обнаружение сбоя службы с помощью Bluetooth на Android
Соединение Bluetooth на Android ICS невозможно
Android Bluetooth java.io.IOException: Connection отказался?
Btw Я работаю над android ics 4.0.4.
Я знаю, что это не проблема с устройством, потому что я пробовал это приложение на разных устройствах.
Я не знаю, и я до сих пор не понимаю вещи UUID, но проблема была UUID. Я использую UUID, который я получил из журналов ядра, и это 00001105-0000-1000-8000-00805F9B34FB
.
Его работа для меня
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); socket = (BluetoothSocket) m.invoke(device, 1); bluetoothAdapter.cancelDiscovery(); socket.connect();
Следующий фрагмент кода работает для меня. Попробуй…
BluetoothDevice mmDevice; boolean temp = mmDevice.fetchUuidsWithSdp(); UUID uuid = null; if( temp ){ uuid = mmDevice.getUuids()[0].getUuid(); } tmp = device.createRfcommSocketToServiceRecord(uuid);
Я работал с аналогичным процессом обучения. Я попытался документировать то, что я узнал в серии примеров.
Это может помочь:
http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html
Это настройка простой связи между Android-устройством и ПК через Bluetooth. Примеры содержат файлы Android, а также сервер SPP в Java и один в perl для ПК.
Надеюсь это поможет.
Убедитесь, что ваше приложение не пытается подключиться, когда адаптер занят обнаружением: похоже, проблема заключалась в том, что до того, как я позвонил
clientSocket.connect()
Мне нужно было позвонить
btAdapter.cancelDiscovery()
Это помогло решить ту же проблему для меня Matts Reco
Вам нужно будет предоставить действительный UUID для обнаружения службы.
BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID);
Существует несколько распространенных UUID для различных стандартных (по умолчанию) bluetooth-сервисов (Handsfree, File transfer и т. Д.).
Глянь сюда
Попробуйте использовать образец образца Bluetooth Chat, предоставленный как часть SDK, если вы просто пытаетесь протестировать устройство. Этот код, который вы пытаетесь использовать, и тот, который указан на сайте developer.android.com, включен в пример Bluetooth Chat.