Android - InputManager.InputDeviceListener NewApi异常

时间:2014-04-15 08:24:06

标签: android joystick

我希望从连接到我的Android的操纵杆中捕捉键和动作事件中的事件。

我正在使用InputManager.InputDeviceListener,但支持的最低API级别为14,InputManager.InputDeviceListener要求API级别为16。

您知道API级别14支持的解决方案吗?

不编译的代码:

public class MyActivity extends Activity implements InputManager.InputDeviceListener {

    @Override
    public void onResume() {        
        inputManager.registerInputDeviceListener(this, null);

        // Query all input devices.
        // We do this so that we can see them in the log as they are enumerated.
        int[] ids = inputManager.getInputDeviceIds();
        for (int i = 0; i < ids.length; i++) 
        {
            getInputDeviceState(ids[i]);
        }
    }


    @Override
    protected void onPause()
    {
        inputManager.unregisterInputDeviceListener(this);
    }

    public InputDeviceState getInputDeviceState(int deviceId) 
    {
        InputDeviceState state = inputDeviceStates.get(deviceId);
        if (state == null) 
        {
            final InputDevice device = inputManager.getInputDevice(deviceId);
            if (device == null) 
            {
                return null;
            }
            state = new InputDeviceState(device);
            inputDeviceStates.put(deviceId, state);

        }
        return state;
    }

}

代码来自Android示例。

2 个答案:

答案 0 :(得分:0)

只看你的代码......

您将获得例外,因为您遗漏了super.onResume();super.onPause();

答案 1 :(得分:0)

您可以在此处找到有关如何在Android Android版本中支持输入设备侦听器的示例代码: http://developer.android.com/training/game-controllers/compatibility.html#newer

本质上,解决方案是为InputManager和InputDeviceListener提供新的类和接口,它们在API级别16和更高级别上实现为SDK类的包装,在API级别9到15上,它们实现了跟踪和通知连接的输入设备。在运行时,应用程序应通过将Build.VERSION.SDK_INT与Build.VERSION_CODES.JELLY_BEAN进行比较来选择适当的实现。