2017-01-26 8 views
-1

otgケーブルが差し込まれたときと差し込まれたときを検出する方法 は、USBデバイスの場合、このようなOTGケーブルのための意図があります:Android Kernel OTG

「android.hardware.usb.action.USB_DEVICE_ATTACHED」私はこのようなアプリを作成しましたが、私は唯一の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から、あなたはドキュメントから

​​

を使用することができます。

OTGがカーネルで有効になっているので

USB OTGマネージャー

このソフトウェアは、もともとソニーエリクソンのXperiaアークS. のために設計されて、私は私の メモリスティックにアクセスすることができない理由は、私は思ったんだけど。だから、私の親指のディスクに の本を読んで、そして幸せにこれを読むためのこの小さなアプリケーションを作成しました! :D

サポート電話番号: *ソニーエリクソンのXperiaアークS(4.0.2.A.042、4.0.2.A.062) *ソニーエリクソンのXperiaミニProは(4.0.2.A.042、4.0あなたがあなた自身にしているhttps://github.com/mik3y/usb-serial-for-android

:.2.A.058) *サムスンギャラクシーネクサス

サポートされているUSBデバイス: * FATのUSBメモリスティック *カードリーダー

関連プロジェクト今すぐボート。

+0

これを私のs3 neo i9301iでどうやって使うのですか? –

関連する問題