Получение дуалшок на 4 позиции - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь создать простое приложение, которым можно управлять с помощью моего геймпада (dualshok 4), и я накапливаю текущие позиции осей и кнопок моего геймпада.

Ниже моего кода, который я уже пробовал:

class MainActivity : AppCompatActivity(), OnGenericMotionListener{

    override fun onGenericMotion(p0: View?, p1: MotionEvent?): Boolean {
        if (p1!!.getSource() and InputDevice.SOURCE_CLASS_JOYSTICK !== 0 && p1!!.getAction() === MotionEvent.ACTION_MOVE) {
            val motionRanges = p1!!.getDevice().getMotionRanges()
            for (mr in motionRanges) {
                val axis = mr.getAxis()
                if (p1.getAxisValue(axis) > 0.5 || p1.getAxisValue(axis) < -0.5) {
                    Log.d("JOY_DEBUG", "Axis found: " + MotionEvent.axisToString(axis))
                }
            }
        } else {
            Log.i("JOY_DEBUG", "Not a joystick event.")
        }
        return true
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

Метод "onGenericMotion" не работает, потому что он не вызывается, даже если я сделал это:

class MainActivity : AppCompatActivity(), OnGenericMotionListener{

    override fun onGenericMotion(p0: View?, p1: MotionEvent?): Boolean {

        Log.i("JOY_DEBUG", "method was called")

        if (p1!!.getSource() and InputDevice.SOURCE_CLASS_JOYSTICK !== 0 && p1!!.getAction() === MotionEvent.ACTION_MOVE) {
            val motionRanges = p1!!.getDevice().getMotionRanges()
            for (mr in motionRanges) {
                val axis = mr.getAxis()
                if (p1.getAxisValue(axis) > 0.5 || p1.getAxisValue(axis) < -0.5) {
                    Log.d("JOY_DEBUG", "Axis found: " + MotionEvent.axisToString(axis))
                }
            }
        } else {
            Log.i("JOY_DEBUG", "Not a joystick event.")
        }
        return true
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

Тогда в Logcat ничего не вижу.

Пожалуйста, помогите

...