2012-06-25 35 views
3

ACTION_USB_DEVICE_ATTACHED我碰到使用USB API牆。我試圖用一個廣播接收器接收的意圖ACTION_USB_DEVICE_ATTACHED但它不會。接收意圖通過代碼

爲了澄清我通過清單有很好的工作,但創建了一個新的活動(並添加到後端堆棧中)。我發現這是不可取的,特別是考慮到我的應用程序(終端)的性質。

我的猜測是設備過濾xml元數據需要添加到意向過濾器,但我不知道如何。

歡迎任何反饋!

編輯 - 一些代碼。 這是來自清單的多汁部分。需要注意的是意圖過濾器是爲了有一個動態的BroadcastReceiver註冊拿起意圖(我假設你有)註釋掉。

//<intent-filter> 
// <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
// <category android:name="android.intent.category.DEFAULT" /> 
//</intent-filter> 

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
android:resource="@xml/device_filter"/> 

這裏是鉤我的接收器

//register for attachment 
IntentFilter attachedFilter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED); 
registerReceiver(mUsbAttachedReceiver, attachedFilter); 

這是廣播接收器的聲明

private final BroadcastReceiver mUsbAttachedReceiver = new BroadcastReceiver() 
{ 
@Override 
public void onReceive(Context context, Intent intent) 
    { 
     //BREAKPOINT HERE IS NEVER HIT 
     String action = intent.getAction(); 
     showDebugToast(action); 

     if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { 
      synchronized(this) 
      { 
       UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
       if (device != null){ 
        getDevicePermission(device); 
       } 
      } 
     } 
    } 
}; 

我避免聲明接收器的表現爲我不能完全確保代碼關於在那裏使用的做法(接收器與任何活動分開存在)。我是否認爲只要應用程序正在運行,接收器就會運行,或者即使在manifest中聲明,它也只是前臺運行?任何有關這方面的文獻都很感謝

我已經通過賦予活動'singleTop'launchmode並實現onNewIntent()來避開這個問題。這給了我想要的行爲,同時還允許在沒有活動運行的情況下啓動(使用清單)。這是我的最終目標。不過,我真的很想理解這種行爲,並對解決方案保持高度的興趣!

更多編輯:我的調試設備是三星Galaxy S3。我沒有改變ROM。

+0

你宣佈一個優先爲您BroadcastReciever ?請從您的清單發佈收件人部分以及 –

+0

請參閱我的編輯:) – Gusdor

+0

我知道這是非常晚,但這似乎是http://stackoverflow.com/questions/6981736/android-3-1- USB主機,廣播接收器 - 不 - 不接受-USB元件附加/ 9814826#9814826 – svachalek

回答

0

是的,你需要的活動,以添加元數據:

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

accessory_filter:

<resources> 
    <usb-accessory manufacturer="Acme, Inc" model="Whiz Banger" version="7.0" /> 
</resources> 

看到Android開發者博客 A Bright Idea: Android Open Accessories

+0

我應該更清楚。我已經添加了一個元數據部分,但我不確定如果 - 除了 - 我需要將其添加到過濾器編程。 – Gusdor

+0

@Gusdor結帳這個http://source-android.frandroid.com/frameworks/base/media/tests/CameraBrowser/src/com/android/camerabrowser/MtpClient.java也許有幫助 –

+0

嗨imran。感謝您的鏈接。註冊和接收看起來與我上面發佈的代碼示例非常相似。似乎它是行人的東西,但我顯然錯過了一些東西。 – Gusdor