2010-02-05 34 views
13

Tôi đang viết một ứng dụng có thể giao tiếp với PC của mình. Tôi đã sử dụng các chức năng Bluetooth của SDK 2.1.Bluetooth -> dò tìm dịch vụ không thành công

Tôi có thể tìm thấy thiết bị, nhận địa chỉ MAC của chúng, tạo ổ cắm RFCOMM, nhưng khi tôi bắt đầu kết nối, tôi nhận được thông báo lỗi sau.

Khám phá dịch vụ không thành công.

  1. Có phải vì của UUID, mà không phải là giống nhau trên ứng dụng của tôi và trên máy tính của tôi?
  2. Làm cách nào để có được UUID chính xác trên PC của tôi?

Nếu tôi viết ứng dụng như vậy, là Nexus One khách hàng hoặc máy chủ của tôi?

+4

Tôi có cùng một vấn đề .. – Tomas

Trả lời

7

OK, tôi gặp vấn đề tương tự, nhưng tôi nghĩ tôi có thể trả lời một số câu hỏi của bạn. Nếu máy tính của bạn đã mở một cổng SPP, ví dụ: bằng cách sử dụng "sdptool add --channel = 3 SP", điện thoại Android của bạn sẽ là khách hàng mở ổ cắm và kết nối với ổ cắm này với máy chủ (PC của bạn hoặc bất kỳ thiết bị Bluetooth nào khác, ví dụ: GPS, chuột, v.v.).

Bạn có thể nhận thông tin này bằng cách đọc bài viết Bluetooth, định nghĩa về khách hàng mà tôi đã đưa ra khỏi bài viết này.

Nếu bạn đang mở Cổng SPP trên máy chủ (PC của bạn, v.v.), bạn đang cung cấp dịch vụ tiêu chuẩn và có UUID đặc biệt được chỉ định cho dịch vụ này. Điều này sẽ là: 00001101-0000-1000-8000-00805F9B34FB nếu tôi không nhầm.

Vì vậy, tôi nghĩ rằng chúng tôi sẽ nhận được câu trả lời đủ điều kiện từ nhà phát triển Android. Hoặc hỏi câu hỏi này vào thứ Năm trong giờ làm việc của IRC.

+2

UUID đặc biệt đó hoạt động cho Arduino BT của tôi! Cảm ơn! – phreakhead

+3

Cảm ơn philDev, UUID "00001101-0000-1000-8000-00805F9B34FB" cũng làm việc cho tôi, chạy ứng dụng mẫu BluetoothChat với PC chạy mô phỏng thiết bị đầu cuối cơ bản. –

2

Mặc dù nó có thể là UUID của bạn, tôi cũng khuyên bạn nên đảm bảo rằng Bluetooth MAC chính xác và cao hơn.

Tôi cũng khuyên bạn nên chạy hcidump -X trong thiết bị đầu cuối trên hộp Linux và xem liệu bạn có thể thấy bất kỳ lưu lượng truy cập hai chiều nào giữa máy và điện thoại Linux của bạn trong suốt quá trình không.

1

Tôi đã gặp sự cố tương tự khi kết nối lại SPP sau lần kết nối đầu tiên.

Điều này là do rfcomm channel=-1 trong BluetoothService.java. Tôi đã thêm updateDeviceServiceChannelCache() vào cuối fetchRemoteUuids() và sau đó hoạt động!

+0

Bạn có thể giải thích điều này không? Bạn đã bao gồm các nguồn Android đã sửa đổi cho dự án của mình? Hay bạn đã làm thế nào? – Blackhex

2

Tôi tìm thấy một cách để đảm bảo rằng UUID được tìm thấy trên thiết bị. Về phía khách hàng, trước khi device.createRfcommSocketToServiceRecord(uuid); thêm:

Process process = Runtime.getRuntime().exec("su -c 'sdptool records " + device.getAddress() + "'"); 
process.waitFor(); 

Quá trình này được đông lạnh trong 20-30 giây, vì Android được lấy dịch vụ. Nhưng sau đó, nếu máy chủ đang ở chế độ khám phá (nếu máy chủ là điện thoại Android), kết nối sẽ thành công mọi lúc!

+0

Cần phải là gốc – psv

4

Gợi ý: Nếu bạn đang kết nối với bảng nối tiếp Bluetooth, hãy thử sử dụng SPP UUID 00001101-0000-1000-8000-00805F9B34FB nổi tiếng. Tuy nhiên nếu bạn đang kết nối với một đồng nghiệp Android thì hãy tạo UUID duy nhất của riêng bạn.

The Link

0

Điều này chủ yếu xảy ra với HTC. Tôi phải đối mặt với cùng một vấn đề. Nếu bạn lần đầu tiên kết nối thành công nhưng không thành công sau đó, chỉ cần khởi động lại điện thoại và dịch vụ không thành công sẽ khởi động lại khi làm như vậy.

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