【发布时间】:2017-01-21 14:44:13
【问题描述】:
我正在尝试为 android 电视制作一个应用程序,它将使用电视遥控器中的以下按钮:up、down、left、right、center/enter、home、@ 987654328@.
我需要哪些课程/活动才能做到这一点?
我一直在尝试使用此处找到的Dpad 代码:Link dev android.
但是,当我尝试在具有方向键输入的电视上使用 android 模拟器对其进行测试时,它不起作用。通过大量的 Log 语句,我发现我的问题在于以下代码行:
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;
}
});
【问题讨论】:
标签: android android-studio android-tv