2017-01-26 5 views
-1

Как использовать приложение для обнаружения, когда кабель otg подключен и когда он подключен? Есть намерение для OTG кабель, как это для USB устройств: «android.hardware.usb.action.USB_DEVICE_ATTACHED»Android Kernel OTG

Я создал приложение, как это, но я только обнаруживает флэш-накопитель не OTG кабель:

public class MainActivity extends AppCompatActivity 
{ 

    private TextView mInfo; 
    private Logger mLogger; 
    private HashMap<UsbDevice, UsbDataBinder> mHashMap = new HashMap<UsbDevice, UsbDataBinder>(); 
    private UsbManager mUsbManager; 
    private PendingIntent mPermissionIntent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mInfo = (TextView)findViewById(R.id.log); 

     mLogger = new Logger(this); 
     mLogger.setMode(Logger.MODE_TOAST); 

     mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 

     usbConnection(); 
    } 

    private void usbConnection() { 
     IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED); 
     registerReceiver(mUsbAttachReceiver , filter); 
     filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED); 
     registerReceiver(mUsbDetachReceiver , filter); 

     mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); 
     filter = new IntentFilter(ACTION_USB_PERMISSION); 
     registerReceiver(mUsbReceiver, filter); 

     showDevices(); 
    } 

    protected void onDestroy() { 
     super.onDestroy(); 
     unregisterReceiver(mUsbDetachReceiver); 
     unregisterReceiver(mUsbAttachReceiver); 
     unregisterReceiver(mUsbReceiver); 
    }; 

    BroadcastReceiver mUsbDetachReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { 
       UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
       if (device != null) { 
        // call your method that cleans up and closes communication with the device 
        UsbDataBinder binder = mHashMap.get(device); 
        if (binder != null) { 
         binder.onDestroy(); 
         mHashMap.remove(device); 
         Toast.makeText(MainActivity.this, "Attached!", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     } 
    }; 

    BroadcastReceiver mUsbAttachReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { 
       showDevices(); 
       Toast.makeText(MainActivity.this, "Detached!", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

    private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; 
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 

     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (ACTION_USB_PERMISSION.equals(action)) { 
       synchronized (this) { 
        UsbDevice device = (UsbDevice) intent 
          .getParcelableExtra(UsbManager.EXTRA_DEVICE); 

        if (intent.getBooleanExtra(
          UsbManager.EXTRA_PERMISSION_GRANTED, false)) { 
         if (device != null) { 
          // call method to set up device communication 
          UsbDataBinder binder = new UsbDataBinder(mUsbManager, device); 
          mHashMap.put(device, binder); 
          Toast.makeText(MainActivity.this, "Permission Granted!", Toast.LENGTH_SHORT).show(); 
         } 
        } else { 
         // Log.d(TAG, "permission denied for device " + device); 
        } 
       } 
      } 
     } 
    }; 

    private void showDevices() { 
     HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList(); 
     Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); 
     while(deviceIterator.hasNext()){ 
      UsbDevice device = deviceIterator.next(); 
      mUsbManager.requestPermission(device, mPermissionIntent); 
      //your code 
      mLogger.log("usb", "name: " + device.getDeviceName() + ", " + 
        "ID: " + device.getDeviceId()); 
      mInfo.append(device.getDeviceName() + "\n"); 
      mInfo.append(device.getDeviceId() + "\n"); 
      mInfo.append(device.getDeviceProtocol() + "\n"); 
      mInfo.append(device.getProductId() + "\n"); 
      mInfo.append(device.getVendorId() + "\n"); 
     } 
    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 

    } 
} 
+0

Вы задаете один и тот же вопрос снова и снова, пожалуйста, остановитесь! – Selvin

+0

Смогу ли я получить ответ на вопрос? –

+0

Почему я не получу ответа? –

ответ

1

Я никогда не пытаюсь USB OTG, но из https://github.com/shakalaca/USB-OTG-Manager вы можете использовать

<intent-filter> 
    <action android:name="com.sonyericsson.hardware.action.USB_OTG_DEVICE_CONNECTED" /> 
    <action android:name="com.sonyericsson.hardware.action.USB_OTG_DEVICE_DISCONNECTED" /> 
    <action android:name="com.sonyericsson.hardware.action.USB_OTG_ERROR" /> 
    <action android:name="com.sonyericsson.usbotg.ACTION_ERROR_OK" /> 

    <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> 

</intent-filter> 

из документации:

USB OTG менеджер

Эта программа первоначально разработана для Sony Ericsson Xperia Arc S. Поскольку OTG включена в ядро, я задаюсь вопросом, почему я не могу получить доступ к клюшку памяти. Поэтому я создал это небольшое приложение для чтения книг на моем диске большого пальца и счастливо после этого! : D

Поддерживаемые телефоны: * Sony Ericsson Xperia Arc S (4.0.2.A.042, 4.0.2.A.062) * Sony Ericsson Xperia Mini Pro (4.0.2.A.042, 4,0 .2.A.058) * Samsung Galaxy Nexus

Поддерживаемые устройства USB: * карта памяти USB FAT * Кардридер

связанные проекта: https://github.com/mik3y/usb-serial-for-android

вы самостоятельно теперь лодка.

+0

Как использовать это на моем s3 neo i9301i? –

Смежные вопросы