2010-11-17 34 views
30

Đây là kịch bản:Làm cách nào để tạo ổ cắm Android RFCOMM mà không có bất kỳ đầu vào nào từ người dùng?

Tôi cần viết một ứng dụng cho Android để tạo ổ cắm RFCOMM cho PC bằng khóa Bluetooth (tôi cũng sẽ viết máy chủ).

Yêu cầu của tôi là người dùng không phải ghép nối thiết bị theo cách thủ công.

Thực ra, với một hack lớn, tôi đang sử dụng createInsecureRfcommSocket.

Một chút kịch bản: Tôi đã ứng dụng Android trao đổi thông tin với hộp Linux có ổ cắm RFCOMM được mở. Tôi có thể tự thiết lập mã PIN trên các thiết bị (cứng mã hóa nó là một lựa chọn)

Tôi đang tìm đường khác nhau:

Viết JNI bao bọc

Như đã được thực hiện bởi Max here Kellermann, tôi có thể viết một lớp JNI để làm cho tất cả các giai đoạn ghép nối. Đây phải là một lựa chọn tốt, nhưng có một vấn đề:

NDK 4b không cung cấp thư viện libbluetooth, do đó, lỗi lbluetooth cũng như NDK v.3.

Options:

  1. Tìm NDK 1.5 (trong đó bao gồm bluetooth lib). Sau nhiều ngày tìm kiếm trên web tôi đã không thể tìm ra. Bất cứ ai có hoặc biết nơi tôi có thể tìm thấy nó?
  2. Biên dịch libbluetooth cho Android một mình và sử dụng chúng cho lbluetooth. Không may mắn ở đó, tôi không thể xây dựng chúng. Bất kỳ gợi ý nào?

Sử dụng một cái gì đó tiếp xúc bởi các API

Bất kỳ ai biết làm thế nào tôi có thể sử dụng createRfcommSocketToServiceRecord và có người sử dụng không tự ghép thiết bị? Có thể không? Làm thế nào tôi nên viết máy chủ?

Cái gì tôi không biết

lẽ (chắc chắn!) Có cái gì đó tôi không biết. Có lẽ tôi có thể sử dụng cái gì khác? Không phải RFCOMM? SDP?

Có lẽ tôi có thể ghép nối thủ công với API Android?

Tôi hy vọng có đủ rõ ràng, nếu không chỉ yêu cầu. Và một lần nữa, vì đây không phải là lần đầu tiên, tôi ở trong tầm tay của bạn :)

Cảm ơn tất cả những người hỗ trợ!

+9

Đầu cơ, nhưng tôi sẽ không ngạc nhiên nếu nó được thiết kế cố ý để người dùng tham gia (phê duyệt) là cần thiết để ghép nối. Ít nhất đó sẽ phù hợp với những nơi khác mà thiết kế Android yêu cầu tương tác người dùng vì lý do bảo mật. –

+0

Có, nhưng api "chính thức" không phải là cách duy nhất. Đối với điều đó tôi hỏi về ndk 1.5, xây dựng libbluetooth hoặc các chức năng @hide khác. –

+0

Nếu libbluetooth đã bị xóa, rất có thể phiên bản cũ hơn sẽ không hoạt động trên phiên bản Android mới hơn ngay cả khi bạn tìm thấy nó. Đó là cảnh báo liên tục chống lại việc sử dụng API không công khai - những thay đổi trong tương lai có thể phá vỡ chúng. –

Trả lời

2

Cuối cùng, tôi có thể nói rằng bạn không thể.

Thậm chí nếu bạn tìm được cách, sử dụng trình bao bọc, viết mô-đun C, v.v., sự tiến hóa của Android có thể sẽ thay đổi thứ bạn đang sử dụng.

Và như vậy, không có tùy chọn. Thật đáng buồn.

Hãy xem cách Android Bluetooth API sẽ thay đổi trong tương lai.

-1

API Android Bluetooth chưa được hoàn tất và sẽ thay đổi. Sử dụng có nguy cơ của riêng bạn. Lớp này triển khai một API cho lớp Bluetooth RFCOMM. Một ổ cắm RFCOMM tương tự như một ổ cắm bình thường ở chỗ nó lấy một địa chỉ và một số cổng. Tất nhiên, sự khác biệt là địa chỉ là địa chỉ thiết bị Bluetooth và số cổng là kênh RFCOMM.API cho phép thiết lập các khe cắm nghe thông qua các phương thức liên kết, nghe và chấp nhận, cũng như cho việc tạo các kết nối gửi đi với kết nối, connectAsync và waitForAsyncConnect. Sau khi xây dựng một ổ cắm, bạn cần phải tạo ra nó và sau đó phá hủy nó khi bạn đang sử dụng nó. Cả hai tạo và chấp nhận trả về một FileDescriptor cho dữ liệu thực tế. Ngoài ra, bạn có thể gọi getInputStream và getOutputStream để truy xuất các luồng tương ứng mà không cần phải thông qua FileDescriptor.

+0

Bạn đã đọc câu hỏi chưa? Bởi vì tôi không thể hiểu câu trả lời ... Nó không phù hợp chút nào. –

+0

Điều này đã được sao chép và dán từ http://www.androidjavadoc.com/1.0_r1_src/android/bluetooth/RfcommSocket.html. Vui lòng thêm đầu vào của riêng bạn. –

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