0

USB Accessory

Chế độ USB Accessory cho phép người dùng kết nối phần cứng máy chủ lưu trữ USB được thiết kế đặc biệt cho các thiết bị chạy Android. Các accessory phải tuân theo giao thức phụ kiện Android được nêu trong tài liệu Bộ công cụ bộ phát triển phụ kiện Android . Điều này cho phép các thiết bị chạy Android không thể hoạt động như một máy chủ lưu trữ USB vẫn tương tác với phần cứng USB. Khi thiết bị chạy Android đang ở chế độ USB accesory, phụ kiện Android USB đính kèm hoạt động như host, cung cấp nguồn cho bus USB và liệt kê các thiết bị được kết nối. Android 3.1 (API cấp 12) hỗ trợ chế độ USB accessory và tính năng này cũng được quay lại Android 2.3.4 (API cấp 10) để hỗ trợ cho một phạm vi rộng hơn của thiết bị.

Chọn đúng USB Accessory API Mặc dù API USB Accessory đã được giới thiệu trên nền tảng trong Android 3.1 nhưng chúng cũng có sẵn trong Android 2.3.4 bằng cách sử dụng thư viện tiện ích API của Google API. Bởi vì các API này đã được quay lại bằng cách sử dụng thư viện bên ngoài, có hai gói bạn có thể nhập để hỗ trợ chế độ phụ kiện USB. Tùy thuộc vào những thiết bị hỗ trợ Android mà bạn muốn hỗ trợ, bạn có thể phải sử dụng thiết bị hỗ trợ trên điện thoại di động:

com.android.future.usb: Để hỗ trợ chế độ USB Accessory trong Android 2.3.4, thư viện tiện ích API của Google API bao gồm các API phụ trợ USB được quay lại và chúng được chứa trong namespace này. Android 3.1 cũng hỗ trợ nhập và gọi các class trong namespace này để hỗ trợ các ứng dụng viết bằng thư viện tiện ích. Nếu bạn muốn hỗ trợ nhiều loại thiết bị hỗ trợ chế độ USB Accessory, hãy sử dụng thư viện tiện ích và nhập package này. Cần lưu ý rằng không phải tất cả các thiết bị Android 2.3.4 đều được yêu cầu để hỗ trợ tính năng USB Accessory.

android.hardware.usb: Namespace này chứa các class để hỗ trợ chế độ USB Accessor trong Android 3.1. Android 3.1 hỗ trợ chế độ USB Accessory mà không cần sử dụng thư viện tiện ích. Sử dụng gói này nếu bạn chỉ quan tâm đến các thiết bị Android 3.1 hoặc mới hơn có hỗ trợ phần cứng cho chế độ phụ kiện USB, bạn có thể khai báo trong file manifest của bạn.

Sự khác biệt về cách sử dụng giữa thư viện tiện ích và API nền tảng Nếu bạn đang sử dụng thư viện tiện ích, bạn có được đối tượng UsbManager theo cách sau: Nếu bạn không sử dụng thư viện tiện ích, bạn có được đối tượng UsbManager theo cách sau: Khi bạn lọc một accessory được kết nối với bộ lọc, đối tượng UsbAccessory được chứa bên trong Intent được chuyển đến ứng dụng của bạn. Nếu bạn đang sử dụng thư viện tiện ích, bạn có được đối tượng UsbAccessory theo cách sau: Nếu bạn không sử dụng thư viện tiện ích, bạn có được đối tượng UsbAccessory theo cách sau:

Yêu cầu khai báo Android Manifest Danh sách dưới đây mô tả những gì bạn cần thêm vào Android Manifest của ứng dụng của bạn trước khi làm việc với các API truy cập USB. Các ví dụ Android Manifest và resource file ví dụ được khai báo như sau:

Bởi vì không phải tất cả các thiết bị hỗ trợ Android đều được đảm bảo để hỗ trợ API USB Accessory, bao gồm một phần tử <uses-feature> tuyên bố rằng ứng dụng của bạn sử dụng tính năng android.hardware.usb.accessory này. Nếu bạn đang sử dụng thư viện tiện ích, hãy thêm phần tử <uses-library> xác định com.android.future.usb.accessory cho thư viện. Đặt SDK tối thiểu của ứng dụng lên mức API 10 nếu bạn đang sử dụng thư viện bổ sung hoặc 12 nếu bạn đang sử dụng package android.hardware.usb. Nếu bạn muốn ứng dụng của bạn được thông báo về một phụ kiện USB attached, hãy chỉ định một cặp phần tử <intent-filter> và <meta-data>cho android.hardware.usb.action.USB_ACCESSORY_ATTACHED mục đích trong Main Activity của bạn. Phần tử <meta-data> này trỏ đến một tệp nguồn XML bên ngoài tuyên bố xác định thông tin về phụ kiện mà bạn muốn phát hiện. Trong tệp resource XML, khai báo các phần tử <usb-accessory> cho các phụ kiện mà bạn muốn lọc. Mỗi <usb-accessory> có thể có các thuộc tính sau: manufacturer model version Lưu tập tin tài nguyên trong thư mục res/xml/. Tên tệp tài nguyên (không có đuôi .xml) phải giống với tên tệp bạn đã chỉ định trong phần tử <meta-data>. Định dạng cho file resource XML cũng được hiển thị trong ví dụ dưới đây.

Manifest và tập tin resource Ví dụ sau cho thấy một file Manifest mẫu và file resource tương ứng của nó: Trong trường hợp này, file resource sau đây sẽ được lưu res/xml/accessory_filter.xmlvà xác định rằng bất kỳ phụ kiện nào có model, manufacturer và version tương ứng phải được lọc. Accessory gửi các thuộc tính này thiết bị hỗ trợ Android:

Làm việc với Accessory Khi người dùng kết nối các USB Accessory với thiết bị chạy Android, hệ thống Android có thể xác định xem ứng dụng của bạn có quan tâm đến phụ kiện được kết nối hay không. Nếu có, bạn có thể thiết lập truyền thông với phụ kiện nếu muốn. Để làm điều này bạn phải: Discovery các Accessory được kết nối bằng cách sử dụng bộ lọc cho các sự kiện Accessory được attach hoặc bằng cách liệt kê các Accessory đã được kết nối và tìm ra thiết bị phù hợp. Yêu cầu người sử dụng cho phép giao tiếp với Accessory, nếu chưa có. Giao tiếp với Accessory bằng cách đọc và ghi dữ liệu về các EndPoint interface thích hợp.

Dicovery Accessory Ứng dụng của bạn có thể khám phá các phụ kiện bằng cách sử dụng intent filter để được thông báo khi người dùng kết nối Accessory hoặc liệt kê các Accessory đã được kết nối. Sử dụng intent filter rất hữu ích nếu bạn muốn có thể ứng dụng của bạn tự động phát hiện ra một Accessory mong muốn. Việc liệt kê các Accessory đã kết nối rất hữu ích nếu bạn muốn có được danh sách tất cả các Accessory được kết nối hoặc nếu ứng dụng của bạn không lọc theo ý định.

Sử dụng Intent filter Để ứng dụng của bạn phát hiện ra một USB Accessory cụ thể, bạn có thể chỉ định intent filter để lọc theo android.hardware.usb.action.USB_ACCESSORY_ATTACHED. Cùng với intent filter này, bạn cần chỉ định một tệp resource chỉ định thuộc tính của USB Accessory, chẳng hạn như manufacturer, model, và version. Khi người dùng kết nối một Accessory phù hợp với filter accessory của bạn,

Ví dụ sau chỉ ra cách khai báo intent filter: Ví dụ sau chỉ ra cách khai báo tệp resource tương ứng chỉ định các USB Accessory mà bạn quan tâm: Trong activity của bạn, bạn có thể lấy mẫu Usb Accessory đại diện cho accessory attach từ intent như sau (với thư viện tiện ích): Hoặc như thế này (với các nền tảng API):

Enumerating accessories Sử dụng getAccessoryList() method để lấy mảng tất cả các USB Access đã kết nối: Hỏi quyền giao tiếp với USB Accessory Trước khi giao tiếp với USB Accessory, ứng dụng của bạn phải có sự cho phép từ người dùng của bạn. Để đăng ký broadcast receiver, đặt code sau vào onCreate() method trong activity của bạn: Để hiển thị dialog yêu cầu người dùng cho phép kết nối với accessory, hãy gọi requestPermission() method: Khi người dùng trả lời hộp thoại, bạn nhận được intent có chứa EXTRA_PERMISSION_GRANTED, một biến boolean đại diện cho câu trả lời. Kiểm tra thêm cho một giá trị của sự thật trước khi kết nối với phụ kiện.

Giao tiếp với accessory Bạn có thể giao tiếp với các accessory bằng cách sử dụng UsbManager để có được một file descriptor mà bạn có thể thiết Input và Output stream để đọc và ghi dữ liệu. Chấm dứt giao tiếp với accessory Khi bạn đã giao tiếp xong với một accessory hoặc nếu accessory bị rút ra, hãy đóng descriptor đã mở bằng cách gọi close(). Để nghe các sự kiện detached, hãy tạo ra một Broad cast receiver như dưới đây:


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.