Mi aplicación no coger «ACTION_USB_DEVICE_ATTACHED» pero «ACTION_USB_DEVICE_DETACHED» trabajo fino.
El inicio de la aplicación correctamente si puedo conectar el dispositivo usb, pero me desconecte durante la ejecución BroadcastReceiver derecho de captura «ACTION_USB_DEVICE_DETACHED». Si me fije de nuevo BroadcastReceiver no coger nada.

    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");
    }
  }

Y manifiesto:

<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>

Filtro de dispositivo (I verificación de proveedores y el id del producto):

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

OriginalEl autor Nuccio Epifanio | 2013-03-02

5 Comentarios

  1. 8

    Todo funciona como se ha descrito anteriormente, salvo pequeños cambios! En mi investigación singleTask en la aplicación de la etiqueta no ayuda, pero ayudó cuando me lo puse en la etiqueta de actividad

    <activity
    ...
    android:launchMode="singleTask">

    Que me ha proporcionado con ANDROID comenzó a enviar onNewIntent a la actividad. Y en onNewIntent yo sólo tenía que llegar dispositivo de intención, con cualquiera de las solicitudes de permisos:

    @Override
    protected void onNewIntent(Intent intent)
    {
        super.onNewIntent(intent);
        if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED))
        {
            UsbDevice device  = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

    OriginalEl autor user2586179

  2. 3

    agregar este permiso también 🙂

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

    OriginalEl autor Shiv

  3. 2

    También trata de añadir <application android:launchMode="singleTask">. Esto funciona para mí con USB_ACCESSORY_ATTACHED, puede trabajar para usted también.

    OriginalEl autor TronicZomB

  4. 1

    Yo era capaz de resolver este problema:

    1. Agregar android:launchMode="singleTask" atributo en el Iniciador de la Actividad
    2. Agregar esta Intención de Filtro en su Lanzador Actividad

      <intent-filter>
          <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
      </intent-filter>
    3. Añadir metadatos a su Lanzador Actividad

      <meta-data
          android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
          android:resource="@xml/device_filter" 
      />
    4. Reemplazar el OnNewIntent Método en su Lanzador Actividad

      protected void onNewIntent(Intent intent) {
          if(intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)){
              getPermission();
          }
      };
      1. Ahora si va a separar -> conecte de nuevo el Dispositivo USB, onNewIntent() Método será llamado..

    OriginalEl autor Yasir Ali

  5. 0

    Android de Referencia para la Actividad dice que para el uso de onNewIntent():

    «Este es un llamado para las actividades que establece launchMode «singleTop» en su paquete, o si un cliente utiliza el FLAG_ACTIVITY_SINGLE_TOP bandera cuando se llama a startActivity(intent)»

    Así launchMode singleTop == singleTask?

    La respuesta se encuentra aquí: enlace. En ambos casos, sólo existe una instancia creada (con un poco de diferencia para ‘singleTask’). Así launchMode singleTop = singleTask en este caso aquí…

    OriginalEl autor user1480734

Dejar respuesta

Please enter your comment!
Please enter your name here