2013-08-25 2 views
0

HID USB 풋 페달에서 입력을 읽는 Android 애플리케이션을 작성 중입니다 (페달을 밟고 메시지를받는 등).Android 전문가가 이상한 USB 호스트 동작을 설명 할 수 있습니까

UsbManager가 장치를 인식하지 못합니다. 는 "EventHub이는/dev/입/mouse0에 대한 드라이버 버전을 가져올 수 없습니다 아니라 타자기"

: 그것에서 나는 로그 캣이 오류 메시지를 볼 수 있기 때문에 플러그 때 풋 페달은 안드로이드 커널에서 오류를 throw 할 수있다 그러나 풋 페달이 작동한다는 것을 알고 있습니다. 플러그를 꽂아 누르면 포커스가 액티비티의 다음 버튼으로 바뀌므로 ... Nexus 타블렛과 통신 중이며 분명히 기본 동작이 다음 버튼/객체로 초점을 이동하십시오. 다른 USB 장치를 인식 할 것이므로이 코드는 문제가되지 않는다고 생각합니다. 단지이 풋 페달이 아닙니다. 포커스가 언제 바뀌는 지 확인하여 실제로 알려줄 수는 있지만이 앱이 백그라운드에서 서비스로 실행되기 때문에 원하는대로 작동하지 않습니다. 이 특정 USB 장치에 대한 인 텐트 필터를 설정하려고했습니다 (제품 ID와 공급 업체 ID를 알고 있습니다). 그러나 여전히 연결된 장치가 표시되지 않으며 사용자에게 응용 프로그램 시작 확인을 요청하는 팝업 메시지가 표시되지 않습니다. 연결된 모든 USB 장치를 나열하려고 시도했지만 항상 빈 목록이 표시됩니다.

Android의 USB 관리자가 인식하지 못하더라도 풋 페달을 눌렀을 때 알 수 있도록이 기기의 입력을 차단하는 방법이 있습니까?

완벽을 기하기 위해, 여기에 내 코드가 있습니다. 나는 안드로이드 소스에서 몇 가지 조사를했다

public int list_usb_devices() 
{ 
    int device_count = 0; 
    UsbManager mUsbManager; 
    mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 
    String LOG_TAG = "USB"; 
    for (UsbDevice device : mUsbManager.getDeviceList().values()) { 

     //This code is never reached... 

     Log.d(LOG_TAG, "Detected device: " + device.toString()); 
     Log.d(LOG_TAG, "Model: " + device.getDeviceName()); 
     Log.d(LOG_TAG, "Id: " + device.getDeviceId()); 
     Log.d(LOG_TAG, "Class: " + device.getDeviceClass()); 
     Log.d(LOG_TAG, "Protocol: " + device.getDeviceProtocol()); 
     Log.d(LOG_TAG, "VendorId: " + device.getVendorId()); 
     Log.d(LOG_TAG, "ProductId: " + device.getProductId()); 

     CharSequence text = device.toString(); 
     show_toast(text); 

     device_count++; 
    } 
    return device_count; 
} 
+0

귀하의 문제는 안드로이드가 HID 장치 자체를 주장, 그래서에서 응용 프로그램에 사용할 수 있도록하지 않는 것 같다 그것은 USB 장치를 다루는 방식으로 만들어진 것이 아닙니다. AFAIK android에는 API를 통해 직접 사용할 수 있도록 시스템 지원 장치를 "연결 해제"하는 독점적 인 방법이 없습니다. 아마도 플랫폼을 수정하거나 적어도 "루팅 된"장치를 가지고 있다면 뭔가를 성취 할 수있을 것입니다. 일반적으로 HID로 존재하지 않는 USB 장치를 사용하거나 펌웨어를 변경하지 않는 것이 가장 좋은 해결책 일 수 있습니다. –

답변

1

모든 HID 부팅 장치 (마우스, 키보드 등)를 블랙리스트 때문에 사용하여 액세스 할 수없는 것 : 나는 갤럭시 넥서스 10 태블릿에 테스트입니다 USBManager API. 여기

이 UsbHostManager.java에서 관련 부분 여기를 참조 : http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/com/android/server/usb/UsbHostManager.java/?v=source

/* returns true if the USB device should not be accessible by applications */ 
private boolean isBlackListed(int clazz, int subClass, int protocol) { 
    // blacklist hubs 
    if (clazz == UsbConstants.USB_CLASS_HUB) return true; 

    // blacklist HID boot devices (mouse and keyboard) 
    if (clazz == UsbConstants.USB_CLASS_HID && 
      subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT) { 
     return true; 
    } 

    return false; 
} 
관련 문제