Android: BroadcastReceiver chaque fois que vous insérez/retirez le périphérique USB, branchez-le dans/à partir d'un port USB

Ma demande de ne pas l'attraper "ACTION_USB_DEVICE_ATTACHED" mais "ACTION_USB_DEVICE_DETACHED" beau travail.
Démarrage de l'Application correctement si je connecte l'usb de l'appareil, mais j'ai débrancher lors de l'exécution BroadcastReceiver droit attraper "ACTION_USB_DEVICE_DETACHED". Si j'attache de nouveau BroadcastReceiver ne pas attraper quoi que ce soit.

    IntentFilter filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
rocrailService.registerReceiver(mUsbReceiver, filter);


  //BroadcastReceiver when insert/remove the device USB plug into/from a USB port  
  BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    System.out.println("BroadcastReceiver Event");
    if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
        mSerial.usbAttached(intent);
        mSerial.begin(mBaudrate);
        loadDefaultSettingValues();
        Run=true;
        start();
        System.out.println("BroadcastReceiver USB Connected");

    } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
        mSerial.usbDetached(intent);
        mSerial.end();
        Run=false;
        System.out.println("BroadcastReceiver USB Disconnected");
    }
  }

Et manifeste:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.DCCWLocoDisplay"
android:versionCode="0"
android:versionName="0" >

<uses-sdk android:targetSdkVersion="12"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<application
    android:icon="@drawable/dccw"
    android:label="@string/app_name" >
    <activity android:icon="@drawable/cab_64" android:name="net.DCCWLocoDisplay.activities.ActRCCab" android:theme="@style/FullHeightMainDialog" android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <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>
    <activity android:name="net.DCCWLocoDisplay.activities.ActPreferences" android:theme="@style/FullHeightDialog" />
    <activity android:name="net.DCCWLocoDisplay.activities.ActAccessory" android:theme="@style/FullHeightDialog" />
    <activity android:name="net.DCCWLocoDisplay.activities.ActAbout" android:theme="@style/FullHeightDialog" />
    <activity android:name="net.DCCWLocoDisplay.activities.ActProgramming" android:theme="@style/FullHeightDialog" />
    <activity android:name="net.DCCWLocoDisplay.activities.ActSteps" android:theme="@style/FullHeightDialog" />
    <service android:name="net.DCCWLocoDisplay.DCCWLocoDisplay"/>
    </application>

 </manifest>

De filtre de périphérique (je vérifie vendeur et de l'id de produit):

<resources>
<!-- 0x0403 /0x6001: FTDI FT232R UART -->
<usb-device vendor-id="1027" product-id="24577" /> <!-- FT232RL -->
</resources>

OriginalL'auteur Nuccio Epifanio | 2013-03-02