跟裝置一起工作
當使用者把USB裝置接入到Android裝置上時,Android系統能夠判斷你的應用程式是否對接入的裝置感興趣。如果是你的應用程式感興趣的裝置,你就可以跟你期望的裝置建立通訊。以下是你的應用程式必須要做的工作:
1. 使用以下兩種方法之一來發現接入的UDB裝置:
A. 使用Intent過濾器,過濾使用者接入USB裝置時所發出的通知;
B. 列舉已經接入的USB裝置。
2. 如果沒擷取接入USB裝置的許可權,會向使用者請求接入USB裝置的許可權。
3. 通過讀寫對應介面端點上的資料來跟USB裝置通訊。
發現裝置
使用者既可以通過使用使用者接入USB裝置時所發出Intent過濾通知,也可以通過列舉已經接入的USB裝置,來發現USB裝置。如果你希望你的應用程式能夠自動的檢測到你所期望的USB裝置,那麼要使用Intent過濾器。如果你想要過的接入的所有的已經接入的裝置列表,或者是你的應用程式沒有過濾對應的Intent對象,那麼要使用列舉的方法。
使用Intent過濾器
為了讓你的應用程式發現一個特殊的USB裝置,你可以指定一個android.hardware.usb.action.USB_DEVICE_ATTACHED類型的Intent過濾器。跟這個Intent過濾器一起,你還需要指定一個指定了USB裝置屬性的資源檔,如果產品和供應商ID。當使用者接入的裝置跟你的裝置過濾器匹配的時候,系統會顯示一個對話方塊,詢問你是否允許它們啟動你的應用程式。如果使用者接收,應用程式會自動的被授予訪問裝置的許可權,一直到裝置中斷連線。
以下樣本示範了如何聲明Intent過濾器:
<activity ...>
...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
以下樣本示範了如何聲明對應的你感興趣的USB裝置的資源檔:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device vendor-id="1234" product-id="5678" />
</resources>
在你的Activity中,按照如下的方法,你可以從Intent對象中獲得一個代表接入的裝置的UsbDevice對象:
UsbDevice device=(UsbDevice)
intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
列舉裝置
當你的應用程式要在運行時檢測當前接入的所有的USB裝置時,它可以列舉匯流排上的裝置。使用getDeviceList()方法來擷取已經接入的所有的USB裝置的hash map。該hash map使用USB裝置的名稱做key:
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
...
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
UsbDevice device = deviceList.get("deviceName");
如果你願意,也可以使用hash map的迭代器來處理每個裝置:
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
...
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next()
//your code
}