Android: UUID bluetooth hoạt động như thế nào?


81

Tôi không hiểu UUID bluetooth biểu thị điều gì. Các UUID có biểu thị giao thức (ví dụ: RFCOMM ) không? Nếu vậy, tại sao các createRfcommSocketToServiceRecord()phương thức yêu cầu UUID, khi chúng chỉ định rfcomm ngay trong tên của chúng? Tại sao mã mẫu BluetoothChat có UUID mã cứng, có vẻ tùy ý?

Câu hỏi của tôi đặt ra bởi vì, theo câu hỏi này , tôi nhận được một ngoại lệ con trỏ rỗng khi các thiết bị chạy 4.0.4 cố gắng kết nối (với thiết bị bên ngoài, không phải Android) bằng cách sử dụng phản chiếu. Tuy nhiên, giải pháp cho câu hỏi đó không phù hợp với tôi. UUID muuid = device.getUuids()[0].getUuid();nêu ra một ngoại lệ.

Chỉnh sửa : Tôi đã giải quyết vấn đề đó bằng cách mã hóa cứng UUID cho dịch vụ cổng nối tiếp theo câu trả lời này (sử dụng UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");).

Tôi còn phân vân thêm tại sao tôi cần cung cấp UUID để tạo một ổ cắm rfcomm không an toàn bằng cách sử dụng createInsecureRfcommSocketToServiceRecord(),nhưng không sử dụng phương pháp phản chiếu.

Bất cứ ai có thể thẳng thắn cho tôi?


Chưa bao giờ sử dụng kết nối bluetooth ngoại trừ mục đích học tập, nhưng những gì tôi biết là, UUID là mã định danh của thiết bị, giống như địa chỉ của thiết bị và vẫn giữ nguyên đối với thiết bị.
noob

@Creator: Điều đó mâu thuẫn với câu trả lời này: stackoverflow.com/a/4963069/1286571
ForeverWintr

3
Đó là tất cả những gì tôi biết về UUID bluetooth, bạn có thể thử đọc bản pdf này để hiểu rõ hơn về giao thức Bluetooth và UUID - people.csail.mit.edu/rudolph/Teaching/Articles/PartOfBTBook.pdf
noob

Câu hỏi: Nó có gây ra hậu quả gì không khi điện thoại Android không hỗ trợ UUID từ thiết bị từ xa. (UUID không được liệt kê trong Android ... getUuids ())?
Orri,

Hey hey Hey! Tôi muốn hỏi điều gì đó, @ForeverWintr, có ổn không nếu tôi xác định một UUID duy nhất với định dạng của riêng mình và được sử dụng trong hai thiết bị Android? Ý tôi là, họ có thể giao tiếp với nhau không?
gumuruh

Câu trả lời:


7

Trong Bluetooth, tất cả các đối tượng được xác định bằng UUID. Chúng bao gồm các dịch vụ, đặc điểm và nhiều thứ khác. Bluetooth duy trì cơ sở dữ liệu các số được chỉ định cho các đối tượng tiêu chuẩn và chỉ định các phạm vi phụ cho các nhà cung cấp (đã trả đủ tiền đặt trước). Bạn có thể xem danh sách này tại đây:

https://www.bl Bluetooth.com/specification/assigned-numbers/

Nếu bạn đang triển khai một dịch vụ tiêu chuẩn (ví dụ: cổng nối tiếp, bàn phím, tai nghe, v.v.) thì bạn nên sử dụng UUID tiêu chuẩn của dịch vụ đó - điều này sẽ cho phép bạn tương tác với các thiết bị mà bạn không phát triển.

Nếu bạn đang triển khai một dịch vụ tùy chỉnh, thì bạn nên tạo các UUID duy nhất để đảm bảo rằng các thiết bị của bên thứ ba không tương thích không cố gắng sử dụng dịch vụ của bạn vì nghĩ rằng đó là thứ khác. Cách dễ nhất là tạo các kết quả ngẫu nhiên và sau đó mã hóa kết quả trong ứng dụng của bạn (tất nhiên là sử dụng các UUID tương tự trong các thiết bị sẽ kết nối với dịch vụ của bạn).


Tôi lấy các UUID này ở đâu và tại sao chúng luôn là các chuỗi dường như là ngẫu nhiên?
luke cross

UUID được tạo theo RFC 4122. Có năm phiên bản UUID khác nhau để lựa chọn. Phổ biến nhất là phiên bản 1 (dựa trên dấu thời gian và địa chỉ MAC) và phiên bản 4 (ngẫu nhiên). Xem thêm en.wikipedia.org/wiki/Universally_unique_identifier . Trang web có thể tạo UUID cho bạn là uuidgenerator.net . Nếu bạn là thành viên Bluetooth SIG, thì họ cung cấp một thuật toán để tạo UUID gắn với ID thành viên của bạn.
David C.

29

UUID được sử dụng để nhận dạng thông tin duy nhất. Nó xác định một dịch vụ cụ thể được cung cấp bởi thiết bị Bluetooth. Tiêu chuẩn xác định một cơ bản BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB.

Các thiết bị như cảm biến chăm sóc sức khỏe có thể cung cấp dịch vụ, thay thế tám chữ số đầu tiên bằng một mã được xác định trước. Ví dụ: một thiết bị cung cấp kết nối RFCOMM sử dụng mã ngắn: 0x0003

Vì vậy, điện thoại Android có thể kết nối với một thiết bị và sau đó sử dụng Giao thức khám phá dịch vụ (SDP) để tìm hiểu dịch vụ mà nó cung cấp (UUID).

Trong nhiều trường hợp, bạn không cần sử dụng các UUID cố định này. Ví dụ: trong trường hợp của bạn đang tạo một ứng dụng trò chuyện, một điện thoại Android tương tác với một điện thoại Android khác sử dụng cùng một ứng dụng và do đó có cùng một UUID.

Vì vậy, bạn có thể đặt một UUID tùy ý cho ứng dụng của mình, chẳng hạn như một trong nhiều trình tạo UUID ngẫu nhiên trên web ( chẳng hạn ).


Vậy UUID đầy đủ cho dịch vụ RFCOMM là: 00000003-0000-1000-8000-00805F9B34FB?
gyozo kudor

1
Lưu ý: họ liệt kê dạng ngắn của ID dịch vụ là 32bit. Bạn kết hợp nó với UUID cơ sở của BT SIG 00000000-0000-1000-8000-00805F9B34FB thay thế 4 chữ số đầu tiên của GUID. Ví dụ. RFCOMM là 0x0003, vì vậy UUID cho dịch vụ RFCOMM là 00030000-0000-1000-8000-00805F9B34FB
sam MSFT

22

Nó thường đại diện cho một số dịch vụ (giao thức) phổ biến mà thiết bị bluetooth hỗ trợ.

Khi tạo máy chủ rfcomm của riêng bạn (với listenUsingRfcommWithServiceRecord), bạn nên chỉ định UUID của riêng mình để các khách hàng kết nối với nó có thể xác định nó; đó là một trong những lý do tại sao createRfcommSocketToServiceRecordyêu cầu tham số UUID.

Nếu không, một số dịch vụ phổ biến có cùng UUID, chỉ cần tìm một dịch vụ bạn cần và sử dụng nó.

Xem tại đây


3
thường làm gì? Khi nào thì không? Điều tôi không hiểu là tại sao, nếu tôi đang tạo máy chủ RCOMM, tôi sẽ không sử dụng RFCOMM UUID.
ForeverWintr 21/12/12

1
Vâng, UUIDlà định danh chung . RFCOMM chỉ là một lớp trên ngăn xếp giao thức bluetooth và có UUID được liên kết theo đặc điểm kỹ thuật bluetooth; và được SDP sử dụng, không hoàn toàn chắc chắn để làm gì; nhưng bạn luôn có thể đọc về nó trong thông số kỹ thuật. Bây giờ, nếu bạn đang tạo một dịch vụ trên giao thức RFCOMM, bạn sẽ phải cung cấp UUID theo yêu cầu của SDP, nếu không dịch vụ của bạn sẽ không được phát hiện.
nullpotent 21/12/12

3
Tìm thấy cái này trên web. Tất cả?? UUID cho BT. sviluppomobile.blogspot.de/2012/11/…
Orri,

Liên kết đã chết - đó có phải là danh sách các UUID phổ biến không?
user1725145

7

UUID tương tự như khái niệm về số cổng trong Internet. Tuy nhiên, sự khác biệt giữa Bluetooth và Internet là trong Bluetooth, số cổng được chỉ định động bởi máy chủ SDP (giao thức khám phá dịch vụ) trong thời gian chạy, nơi mỗi UUID được cấp một số cổng. Các thiết bị khác sẽ hỏi máy chủ SDP, người được đăng ký theo số cổng dành riêng, về các dịch vụ có sẵn trên thiết bị và nó sẽ trả lời bằng các dịch vụ khác nhau có thể phân biệt được với nhau bằng cách được đăng ký theo các UUID khác nhau.


4

UUID chỉ là một con số. Nó không có ý nghĩa gì ngoại trừ việc bạn tạo ở phía máy chủ của ứng dụng Android. Sau đó, máy khách kết nối bằng chính UUID đó.

Ví dụ: ở phía máy chủ, trước tiên bạn có thể chạy uuid = UUID.randomUUID () để tạo một số ngẫu nhiên như fb36491d-7c21-40ef-9f67-a63237b5bbea. Sau đó, lưu mã đó và sau đó mã cứng vào chương trình lắng nghe của bạn như sau:

 UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea"); 

Chương trình máy chủ Android của bạn sẽ lắng nghe các yêu cầu đến với UUID đó như sau:

    BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);

BluetoothSocket socket = server.accept ();


1

Để tổng hợp: UUidđược sử dụng để xác định duy nhất các ứng dụng. Mỗi ứng dụng có mộtUUid

Vì vậy, hãy sử dụng giống nhau UUidcho từng thiết bị


0

UUID là viết tắt của từ định danh duy nhất trên toàn cầu. UUID là một chữ số 128 bit đơn giản được phân phối duy nhất trên toàn thế giới.

Bluetooth gửi dữ liệu qua mạng và tất cả các thiết bị lân cận đều có thể nhận được. Giả sử, đôi khi bạn phải gửi một số tệp quan trọng qua Bluetooth và tất cả các thiết bị ở gần đều có thể truy cập tệp đó trong phạm vi. Vì vậy, khi bạn ghép nối với các thiết bị khác, chúng chỉ cần chia sẻ số UUID và khớp trước khi chia sẻ tệp. Khi bạn gửi bất kỳ tệp nào thì thiết bị của bạn sẽ mã hóa tệp đó bằng UUID thiết bị thích hợp và chia sẻ qua mạng. Giờ đây, tất cả các thiết bị Bluetooth trong phạm vi đều có thể truy cập tệp mã hóa nhưng chúng yêu cầu phải có số UUID. Vì vậy, Chỉ các thiết bị UUID phù hợp mới có quyền truy cập để mã hóa tệp và những thiết bị khác sẽ từ chối nguyên nhân gây ra UUID sai.

Tóm lại, bạn có thể sử dụng UUID làm mật khẩu bí mật để chia sẻ tệp giữa hai thiết bị Bluetooth bất kỳ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.