마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

[Odroid X2] USB 포트에 연결된 장치 리스트를 가져오기 관련 문의

+1 추천
참고) 

브로드케스트 코드는 다음과 같습니다..

  /***********USB broadcast receiver*******************************************/
     private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() 
  {
   @Override
   public void onReceive(Context context, Intent intent) 
   {
    String action = intent.getAction();
    if (ACTION_USB_PERMISSION.equals(action)) 
    {
     synchronized (this)
     {
      UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
      if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))
      {
       Toast.makeText(global_context, "Allow USB Permission", Toast.LENGTH_SHORT).show();
       OpenAccessory(accessory);
      } 
      else 
      {
       Toast.makeText(global_context, "Deny USB Permission", Toast.LENGTH_SHORT).show();
       Log.d("LED", "permission denied for accessory "+ accessory);
       
      }
      mPermissionRequestPending = false;
     }
    } 
    else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) 
    {
      CloseAccessory();
    }else
    {
     Log.d("LED", "....");
    }
   } 
  };

안녕하세요.

현재 odroid x2+ 보드를 사용하고 있습니다.( 4.1.2 )

현재 USB 포트에 연결된 장치 리스트를 가져오는 프로그램을 개발하고 있습니다.

하지만, 장치 리스트를 가져오지 못하고 계속  null이 출력되고 있습니다.

(장치가 인식되는 브로드케스트를 타지 않아 리스트를 가져오지 못합니다. )

다음과 같은 질문 2가지를 작성했습니다.  ㅠ_ㅠ

 

1.

USB 포트에 연결된 장치 리스트(ex. 지문인식스케너, 카드리더기 )를 가져오는데, permission 안에 아래 2가지 중, 어떤걸 사용해야 하나요?

    ㄱ.  <action android:name='android.hardware.usb.action.USB_DEVICE_ATTACHED" />

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

 

2.

 USB 포트에 연결된 장치 리스트를 가져오는데, android.hardware.usb 패키지를 사용하게 되는데,

 제가 사용하고 있는 odroid x2(4.1.2)에서도 사용가능하도록 지원되는게 맞나요?

   ㄱ. android.hardware.usb API :

                  http://developer.android.com/guide/topics/connectivity/usb/host.html

 

3.

  인식할 장비의 정보를 입력하는, res -> xml -> accessory_filter.xml을 추가하게 됩니다.

 그 안의 내용에는 "제조사:manufacturer, 모델:model, 버전:version"이 입력되게 되는데,

  이 곳에 임의의 값을 넣어도 장치를 인식하게 되나요?

  아니면, USB 포트에 연결된 장치를 인식할 "제조사, 모델, 버전"이 무조건 장치의 내용과 동일해야 인식이 되나요?

  ( 하지만, 현재 IC를 탑재한 USB 보드 정보를 가져오려면, 인식이 되야 제조자,모델,버전을 알 수 있습니다.. )

    <resources>

            <usb-accessory model="Demo" manufacturer="AI" version="1.0" />

    </resources>

   혹은, usb-device로 해야 된다면, vendor-id와 manufacturer 역시 임의의 값을 넣어도 장치가 인식되나요?

    <resources>

            <usb-device vendor-id="1234" manufacturer="5678" />

    </resources>

 

4.

  Manifest에 아래의 내용이 꼭 필요할가요?

  (제가 찾아본 내용으로는 아래의 내용은 특정 장치를 인식 할 때 사용 된다고 나와있는데,

   USB 장치를 인식하는 내용의 자료에는 모두 포함이 되어 있어서요.. )

  그럼 아래의 내용을 작성하지 않으면 USB 포트에 연결된 모든 장치가 출력이 되어야 하는거 아닌가요?

   UsbAccessory[] accessories = usbmanager.getAccessoryList(); 를 호출하면 null이 출력됩니다.

  

    <meta-data

            android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"

            android:resource="@xml/accessory_filter" >

    </meta-data>

 

 

 

답변 기다리겠습니다. ㅠ

노랑풍선 (160 포인트) 님이 2014년 7월 17일 질문
노랑풍선님이 2014년 7월 17일 수정

1개의 답변

0 추천
 
채택된 답변
USB 호스트와 악세서리 모드에 대해 명확한 개념을 잡으셔야 할 거 같네요.

오드로이드X2 의 6개 포트에 장치를 연결한다면 오드로이드가 USB 호스트로 동작하는 겁니다.

OTG 포트에 연결한다면 USB 악세서리 모드로 동작할 가능성이 많네요.

USB 호스트 모드는 다음 링크를 참고하세요.

http://devguru.co.kr/blog/5851/

샘플프로그램은 아래 참고

http://www.androidpub.com/2312577#comment_2315805

https://github.com/mik3y/usb-serial-for-android
매발톱 (1,460 포인트) 님이 2014년 7월 17일 답변
노랑풍선님이 2014년 7월 18일 채택됨
감사합니다 ^^
참고가 많이 됐습니다 ~
...