Android的聯通性—USB主機模式(二)

來源:互聯網
上載者:User

跟裝置一起工作

當使用者把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

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.