2012-08-23 36 views
7

Tôi đang cố tạo một ứng dụng bluetooth cơ bản để kiểm tra thiết bị.Kết nối Bluetooth Android - Khám phá dịch vụ không thành công

Tôi nhận được mã từ developer.android. Dưới đây là liên kết: http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices

đây được điều hành một phần của mã đề của tôi:

 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; 
     } 

Dù tôi đã cố gắng mmSocket.connect(); không bao giờ hoạt động. Luôn ném một IOException và tôi nhận được bản ghi rằng từ logcat của tôi:

java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)

Tôi đã nhìn vào những bài viết này, và thử những điều viết ra, không ai trong số họ đã giải quyết vấn đề của tôi.

Android Bluetooth: Service Discovery Failed, connection to Desktop/Laptop

Service discovery failed exception using Bluetooth on Android

Bluetooth connection on Android ICS not possible

Android Bluetooth java.io.IOException: Connection refused?

Btw Tôi đang làm việc trên ics android 4.0.4.

Tôi biết đó không phải là vấn đề về thiết bị, vì tôi đã thử ứng dụng này trên các thiết bị khác nhau.

Trả lời

5

Tôi không biết và tôi vẫn không hiểu nội dung UUID nhưng vấn đề là UUID. Tôi đang sử dụng UUID mà tôi nhận được từ các bản ghi hạt nhân và nó là 00001105-0000-1000-8000-00805F9B34FB.

0

Bạn sẽ phải cung cấp UUID hợp lệ để khám phá dịch vụ.

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID); 

Có một số UUID phổ biến cho các dịch vụ bluetooth chuẩn (mặc định) khác nhau (Bộ tai nghe, Truyền tệp, v.v.).

See here

0

Hãy thử sử dụng các dự án mẫu Bluetooth Chat cung cấp như một phần của SDK nếu bạn đang cố gắng để kiểm tra thiết bị. Mã mà bạn đang cố sử dụng và mã được cung cấp trên developer.android.com được bao gồm trong ví dụ Trò chuyện qua Bluetooth.

+0

tôi đã áp dụng những mẫu mã, nhưng kết quả luôn luôn là như vậy. – juliadream

1

Tôi đã làm việc thông qua quy trình tìm hiểu tương tự. Tôi đã cố gắng ghi lại những gì tôi đã học được trong một loạt các ví dụ.

một này có thể được giúp đỡ:

http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html

Nó là thiết lập một kết nối đơn giản giữa thiết bị Android và máy tính qua bluetooth. Các ví dụ có chứa các tập tin Android cũng như một máy chủ SPP trong java và một trong perl cho PC.

Hy vọng điều này sẽ hữu ích.

+0

Tôi đang làm việc về điều này nhưng vẫn không hoạt động, tôi nghĩ rằng tôi đang làm điều gì đó khủng khiếp sai. Cảm ơn sự nhiệt tình của bạn. – juliadream

1

Hãy chắc chắn rằng ứng dụng của bạn không cố gắng để kết nối trong khi adapter đang bận rộn với phát hiện: Có vẻ vấn đề là trước khi tôi gọi

clientSocket.connect() 

tôi cần phải gọi

btAdapter.cancelDiscovery() 

Điều này đã giúp giải quyết vấn đề tương tự cho tôi Matts Reco

2

Đoạn mã sau hoạt động cho tôi. Hãy thử nó ...

BluetoothDevice mmDevice; 
boolean temp = mmDevice.fetchUuidsWithSdp(); 
UUID uuid = null; 
if(temp){ 
uuid = mmDevice.getUuids()[0].getUuid(); 
} 
tmp = device.createRfcommSocketToServiceRecord(uuid); 
+0

đang vật lộn hàng giờ và "mmDevice.getUuids() [0] .getUuid()" của bạn đã giải quyết được vấn đề của tôi. Bây giờ tôi cần hiểu logic 'if (temp)' của bạn –

5

của nó làm việc cho tôi

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(); 
+1

Làm việc cho tôi nữa. – DragonT

Các vấn đề liên quan