2013-07-24 2 views
4

USB 호스트를 망쳐 놓고 지침을 따르면 on the Android Developers 사이트 특정 USB 장치를 연결하면 시작되는 Hello World를 만들 수있었습니다. "의도에서 연결된 장치를 나타내는 UsbDevice를 얻기 ..."시도는 null를 돌려 :Android : 인 텐트에서 UsbDevice 받기

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" /> 
     </activity> 
    </application> 

그리고 내 XML/device_filter.xml (내가 아는 : 여기

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

    Intent intent = new Intent(); 
    UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 


    // device is always null 
    if (device == null){Log.i(TAG,"Null device");} 

내 매니페스트의 비슷한 응용 프로그램을 가지고 있기 때문에 이것들은 올바른 VID와 PID입니다. 열거 방법) on the Android Developers 사이트를 설명 노래 :

<resources> 
    <usb-device vendor-id="1234" product-id="1234"/> 
</resources> 
+0

나는 USB 호스트 통신을 개발하고 있는데, 어딘가에서 코드를 찾을 수 있습니까? – usman

답변

0

내가 해결 (또는 사용 목적을 발견) 덕분에 Taylor Alexander에?. 기본적으로, 내가 이해하는 방법은 응용 프로그램을 여는 의도를 실행하는 것입니다. 은 응용 프로그램을 엽니 다.. 그런 다음 onResume 메소드의 Android Developers 페이지에있는 Enumerating Devices 섹션에 따라 USB 장치를 검색하고 액세스해야합니다.

@Override 
    public void onResume() { 
     super.onResume(); 

     UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 
     HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 
     Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); 

     while(deviceIterator.hasNext()){ 
      UsbDevice device = deviceIterator.next(); 
       // Your code here! 
     } 

저는 이것이 올바른 방법이라고 확신하지는 않지만 작동하는 것처럼 보입니다. 누구든지 추가 제안 사항이 있으면 듣기 좋게됩니다.

5

USB 장치 연결 이벤트로 인해 응용 프로그램이 다시 시작되면 onResume을 호출하면 장치가 의도로 전달됩니다. getParcelableExtra 메서드를 사용하여 해당 항목으로 이동할 수 있습니다. 예 :

@Override 
protected void onResume() { 
    super.onResume(); 

    Intent intent = getIntent(); 
    if (intent != null) { 
     Log.d("onResume", "intent: " + intent.toString()); 
     if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { 
      UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
      if (usbDevice != null) { 
       Log.d("onResume", "USB device attached: name: " + usbDevice.getDeviceName()); 
+0

감사합니다! 이 정보는 찾아 내기가 어렵습니다! – Brent

관련 문제