Я пытаюсь сделать приложение для Android TV, который будет использовать следующие кнопки с пульта ДУ телевизора: вверх, вниз, влево, вправо, центр/войти, дом, назадAndroid студии ТВ кнопки пульта дистанционного управления
Что классы/события мне нужно сделать? Я пытался использовать код Dpad, который можно найти здесь: https://developer.android.com/training/game-controllers/controller-input.html#dpad
Но это не работает, когда я пытаюсь протестировать его с помощью эмулятора Android на телевизоре с вводом направленного ввода. С большим количеством заявлений журнала, я нашел мою проблему, чтобы быть следующие строки кода:
if (event instanceof MotionEvent) {
// Use the hat axis value to find the D-pad direction
MotionEvent motionEvent = (MotionEvent) event;
float xaxis = motionEvent.getAxisValue(MotionEvent.AXIS_HAT_X);
float yaxis = motionEvent.getAxisValue(MotionEvent.AXIS_HAT_Y);
Log.d("test", "xaxis = " + String.valueOf(xaxis) + " yaxis = " + String.valueOf(yaxis));
}
Log.d("test", "returning directionPressed as - " + String.valueOf(directionPressed));
return directionPressed;
и выход я получаю выглядит следующим образом (и печатает 2 раза, даже если нажать на кнопку только один раз):
09-13 14:45:05.643 1489-1489/omgandroid D/test: is motion event = true
09-13 14:45:05.643 1489-1489/omgandroid D/test: is key event = false
09-13 14:45:05.643 1489-1489/omgandroid D/test: xaxis = 0.0 yaxis = 0.0
09-13 14:45:05.643 1489-1489/omgandroid D/test: returning directionPressed as -1
Я вижу, что getAxisValue (MotionEvent.AXIS_HAT_X/Y всегда возвращается 0.0, но я не знаю, почему.
Вот код, где я звоню эту функцию в моей MainActivity.java (внутри OnCreate):
mContentView.setOnGenericMotionListener(new View.OnGenericMotionListener() {
@Override
public boolean onGenericMotion(View view, MotionEvent event) {
Log.d("test", "this works too");
// Check if this event if from a D-pad and process accordingly.
boolean check = Dpad.isDpadDevice(event);
String str_check = String.valueOf(check);
Log.d("test", "is dpad device? " + str_check);
if (check) {
int press = mDpad.getDirectionPressed(event);
Log.d("test", String.valueOf(press));
switch (press) {
case LEFT:
// Do something for LEFT direction press
Log.d("test", "LEFT");
String uri = source + image;
ImageView img = (ImageView) findViewById(R.id.fullscreen_content);
img.setImageResource(R.drawable.a00_d01_01);
return true;
case RIGHT:
// Do something for RIGHT direction press
Log.d("test", "RIGHT");
return true;
case UP:
// Do something for UP direction press
Log.d("test", "UP");
return true;
case DOWN:
// Do something for DOWN direction press
Log.d("test", "DOWN");
return true;
case CENTER:
// DO something for CENTER direction press
Log.d("test", "CENTER");
return true;
default:
return false;
}
}
return false;
}
});
Я немного запутался в том, как реализовать это для моего конкретного случая. Все, что у меня есть для моего ТВ-приложения, - это одно полноэкранное действие, это всего лишь 1 изображение, и я хочу изменить изображение, в зависимости от того, на какую дистанционную кнопку нажимаю. Нет видео или чего-то еще. –
Я отредактировал свой ответ для случая только активности. Дайте мне знать, если вам нужно разъяснение. [Эта ссылка] (http://stackoverflow.com/a/5296551/1759443) может обеспечить более глубокое понимание. Как и [эта ссылка] (https://developer.android.com/reference/android/view/KeyEvent.html). –
https://codeshare.io/JYPqO Я попытался реализовать его, как это, однако, когда я нажимаю кнопки d-pad в эмуляторе, я все еще не получаю никакого вывода. Ваши разъяснения помогли мне понять все еще немного! Я не правильно применяю методы? –