5

入力デバイスが追加/削除されたときに通知を取得しようとしています。私が理解していることから、それは registerInputDeviceListener が行うべきことです...しかし、リスナーが呼び出されていません!

これが私のコードのスニペットです:

InputManager im = (InputManager) getSystemService(Context.INPUT_SERVICE);
im.registerInputDeviceListener(new InputManager.InputDeviceListener() {
    @Override
    public void onInputDeviceAdded(int deviceId) {
        Log.d("Input", "InputDeviceAdded: " + deviceId);
    }

    @Override
    public void onInputDeviceRemoved(int deviceId) {
            Log.d("Input", "InputDeviceRemoved: " + deviceId);
    }

    @Override
    public void onInputDeviceChanged(int deviceId) {
        Log.d("Input", "InputDeviceChanged: " + deviceId);
    }
}, null);

USBマウスのプラグを抜いたときにlogcatに表示されるのは次のとおりです。

01-15 19:19:04.025: INFO/EventHub(5935): Removing device '/dev/input/event0' due to inotify event
01-15 19:19:04.025: INFO/EventHub(5935): Removed device: path=/dev/input/event0 name=Primax USB OPTICAL MOUSE id=11 fd=245 classes=0x80000008
01-15 19:19:04.045: INFO/InputReader(5935): Device removed: id=11, name='Primax USB OPTICAL MOUSE', sources=0x00002002

しかし、私のリスナーは決して呼び出されません...

4

1 に答える 1

5

getInputDevice または getInputDeviceByDescriptor が以前に呼び出されない限り、InputManager はデバイスの変更に対してそれ自体を登録しないことが判明しました。

最初に getInputDevice を呼び出す (結果を無視する) と、コールバックが呼び出されます。

于 2013-01-17T23:06:41.440 に答える