2011-02-03 24 views
6

Tôi đang viết một ứng dụng Android để nói chuyện với thiết bị phần cứng hoàn toàn nằm ngoài tầm kiểm soát của tôi.Ổ cắm RFCOMM Android trên kênh cố định

Ứng dụng của tôi tạo ổ cắm nghe bằng cách sử dụng listenUsingRfcommWithServiceRecord và UUID 00001101-0000-1000-8000-00805F9B34FB. Sau đó, nó gọi accept() trên socket đó để đợi thiết bị từ xa kết nối, nhưng nó không bao giờ thực hiện.

Tôi đã nói chuyện với các nhà sản xuất thiết bị phần cứng và họ nói rằng thiết bị của họ sẽ "chỉ cần kết nối với kênh 1" trên thiết bị từ xa. nghĩa là nó không thực hiện khám phá SDP để tìm ra số kênh chính xác. Họ từ chối thay đổi điều này (mặc dù nó là tất nhiên sai)

Câu hỏi của tôi là có cách nào để buộc Android sử dụng số kênh RFCOMM cố định? Có thể sử dụng sự phản chiếu, giống như thủ thuật gọi trực tiếp createRfcommSocket khi kết nối với máy khách.

Trả lời

1

Các API đó tồn tại nhưng không được hỗ trợ. Nếu bạn vẫn quan tâm, hãy kiểm tra mã nguồn cho nguồn cho Android 1.5 backport of android.bluetooth.

Được cảnh báo, mặc dù, vì API không được hỗ trợ nên chúng có thể bị xóa trong bất kỳ bản phát hành nào trong tương lai.

+0

Cảm ơn bạn đã trả lời. – didster

1

Cách rất hackey là tiêu thụ tất cả các kênh và sau đó giải phóng kênh bạn muốn! Tôi có cùng một vấn đề như bạn và hack này đang làm việc trong lĩnh vực này khoảng một năm mà không có khiếu nại. Có những sơ hở cho điều này, vì vậy sự thành công sẽ phụ thuộc vào trường hợp sử dụng của bạn.

Có tối đa 30 kênh, do đó bạn sẽ mở 30 kết nối (hoặc ít hơn) với UUID mà bạn xác định. Bây giờ, sử dụng spdtool tìm UUID của kết nối socket với kênh bạn muốn. Đóng kết nối đó.

Bây giờ kênh, 1 trong trường hợp của bạn, sẽ là kênh duy nhất khả dụng. Kết nối với nó theo cách bạn muốn. Khi kết nối được thiết lập, hãy đóng tất cả các kết nối khác.

Tôi biết đó là hackey là địa ngục nhưng nó hoạt động cho trường hợp sử dụng của tôi!

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