HID USBフットペダルからの入力を読み取るAndroidアプリケーションを作成しています(ペダルを押す、メッセージを取得する、何かをする)。
UsbManager がデバイスを認識していません。logcat に次のエラー メッセージが表示されるため、プラグイン時に Android カーネルでフット ペダルがエラーをスローしている可能性があります。「EventHub could not get driver version for /dev/input/mouse0, not a typewriter」
ただし、フットペダルが機能することはわかっています。プラグを差し込んで押すと、フォーカスがアクティビティの次のボタンに変わるためです...したがって、Nexusタブレットと通信していることはわかっており、デフォルトのアクションはフォーカスを次のボタン/オブジェクトに移動します。このフットペダルだけでなく、他の USB デバイスも認識できるので、コードに問題はないと思います。フォーカスがいつ変化するかを確認することで、実際にいつ押されたかを知ることができますが、このアプリはサービスとしてバックグラウンドで実行されるため、それは私が望むものには機能しません. この特定の USB デバイスにインテント フィルタを設定しようとしました (製品 ID とベンダー ID はわかっています)。ただし、接続されているデバイスは表示されず、アプリケーションの起動を確認するようにユーザーに求めるポップアップ メッセージは表示されません。私'
このデバイスからの入力を傍受して、Android の USB マネージャーが認識しない場合でも、フット ペダルがいつ押されたかを知る方法はありますか?
完全を期すために、ここに私のコードがあります。Galaxy Nexus 10 タブレットでテストしています。
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;
}