2012-12-06 37 views
1

我在ICS中,正在嘗試安裝一個接收器,當USB設備和/或配件插入/接出平板電腦時將會調用該接收器。我在這個意向註冊中錯過了什麼?

根據文檔和其他Stack問題,它*看起來像我應該需要的是下面的代碼,但是當我運行此代碼時什麼也沒有發生......很難說,導致我的設備有USB配件插入/退出它,所以我的調試只是我寫東西來文件,而不是實際的調試,但它似乎沒有做任何事情。

IntentFilter attachFilter = new IntentFilter(); 
    attachFilter.addAction(ACTION_USB_PERMISSION); 
    attachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);  
    registerReceiver(mAttachReceiver, attachFilter); 

    IntentFilter detachFilter = new IntentFilter(); 
    detachFilter.addAction(ACTION_USB_PERMISSION); 
    detachFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED); 
    registerReceiver(mDetachedReceiver, detachFilter); 

接收器看起來像這樣(我剪下來的簡潔但他們的有效接收器)...

private final BroadcastReceiver mAttachReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     logMsg("ACTION = " + action); 
     ... } 

}

我的清單包含此項:

<uses-feature android:name="android.hardware.usb.host" /> 

有什麼我失蹤了嗎?我已經嘗試了ACTION_USB_DEVICE_ATTACHED而不是ACCESSORY,但似乎沒有產生任何不同的結果。另外,一旦連接後,我可以與應用程序中的設備進行通話,因此,它已被識別,並且從連接的設備(它是NFC讀卡器)發送/接收消息的後續代碼按預期工作。唯一持續失敗的是初始電纜連接的通知。

TIA

回答

6

ACTION_USB_DEVICE_ATTACHED只能是活性的意圖過濾器,而不是一個BroadCastReciever。

UsbManager只解析活動(兩個服務都不是BroadcastReciever)並啓動它們。

所以你沒有收到任何廣播。

編輯: Android開發人員網站確實說了它的廣播,但Android Source只是解決活動。 儘管可以在reciever

EDIT2使用ACTION_USB_ACCESSORY_DETACHED用於分離更新: 沒有什麼錯在你的代碼,只要接收器而言。由於廣播USB_ACCESSORY_ATTACHED的方式,您的代碼無法工作。 USB_ACCESSORY_ATTACHED並非真正意義上的廣播,Android Frameworks僅啓動活動意圖,因此您沒有收到廣播Receiver中的意圖。

您只能使用活動爲附加意圖,而不是接收器

<activity android:name=".YourActivity" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> 
    </intent-filter> 

    <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" 
       android:resource="@xml/accessory_filter" /> 
</activity> 
+0

對不起,我真的不理解你的迴應。你可以發佈一個簡短的代碼*的例子,將廣播? –

+0

真棒,謝謝! –

相關問題