Java 安卓通过遥控器遥控android电视盒
你已经在市场上看到了那些相当便宜的android电视盒。它们后面通常有一个遥控器,具有一些功能,如点击、滑动或左右上下滑动 最近我制作了一个应用程序,并试图用遥控器导航。我在项目中有一些手势方法。我试着向左和向右滑动,但当我在我的手机上尝试时,这个应用程序没有做任何事情,它有一个屏幕,得到了这个手势,并做了它应该做的事情。比如打开导航抽屉等 现在我的问题是:是否需要使用特殊的方法?是否有一些规则需要注意 编辑 这就是我到目前为止所做的。我创建了一个定义动作的类:它来自google.developerJava 安卓通过遥控器遥控android电视盒,java,android,android-layout,Java,Android,Android Layout,你已经在市场上看到了那些相当便宜的android电视盒。它们后面通常有一个遥控器,具有一些功能,如点击、滑动或左右上下滑动 最近我制作了一个应用程序,并试图用遥控器导航。我在项目中有一些手势方法。我试着向左和向右滑动,但当我在我的手机上尝试时,这个应用程序没有做任何事情,它有一个屏幕,得到了这个手势,并做了它应该做的事情。比如打开导航抽屉等 现在我的问题是:是否需要使用特殊的方法?是否有一些规则需要注意 编辑 这就是我到目前为止所做的。我创建了一个定义动作的类:它来自google.develop
public class Dpad {
public final static int UP = 0;
public final static int LEFT = 1;
public final static int RIGHT = 2;
public final static int DOWN = 3;
public final static int CENTER = 4;
int directionPressed = -1; // initialized to -1
public int getDirectionPressed(InputEvent event) {
if (!isDpadDevice(event)) {
return -1;
}
// If the input event is a MotionEvent, check its hat axis values.
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);
// Check if the AXIS_HAT_X value is -1 or 1, and set the D-pad
// LEFT and RIGHT direction accordingly.
if (Float.compare(xaxis, -1.0f) == 0) {
directionPressed = Dpad.LEFT;
} else if (Float.compare(xaxis, 1.0f) == 0) {
directionPressed = Dpad.RIGHT;
}
// Check if the AXIS_HAT_Y value is -1 or 1, and set the D-pad
// UP and DOWN direction accordingly.
else if (Float.compare(yaxis, -1.0f) == 0) {
directionPressed = Dpad.UP;
} else if (Float.compare(yaxis, 1.0f) == 0) {
directionPressed = Dpad.DOWN;
}
}
// If the input event is a KeyEvent, check its key code.
else if (event instanceof KeyEvent) {
// Use the key code to find the D-pad direction.
KeyEvent keyEvent = (KeyEvent) event;
if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
directionPressed = Dpad.LEFT;
} else if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
directionPressed = Dpad.RIGHT;
} else if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
directionPressed = Dpad.UP;
} else if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN) {
directionPressed = Dpad.DOWN;
} else if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER) {
directionPressed = Dpad.CENTER;
}
}
return directionPressed;
}
public static boolean isDpadDevice(InputEvent event) {
// Check that input comes from a device with directional pads.
if ((event.getSource() & InputDevice.SOURCE_DPAD)
!= InputDevice.SOURCE_DPAD) {
return true;
} else {
return false;
}
}
}
在我的主要活动中,我有一个导航抽屉。我想在遥控器D-pad需要时打开和关闭它
mDrawerLayout.setOnGenericMotionListener(new View.OnGenericMotionListener() {
@Override
public boolean onGenericMotion(View view, MotionEvent motionEvent) {
if (Dpad.isDpadDevice(motionEvent)) {
int press = mDpad.getDirectionPressed(motionEvent);
switch (press) {
case Dpad.RIGHT:
// Do something for UP direction press Open the drawer
mDrawerLayout.openDrawer(Gravity.START);
return true;
case Dpad.LEFT:
mDrawerLayout.closeDrawer(Gravity.START);
return true;
}
}
return false;
}
});
在其中一个片段中,我有一个媒体播放器,并使用D-pad up和D-pad down更改视频
v.setOnGenericMotionListener(new View.OnGenericMotionListener() {
@Override
public boolean onGenericMotion(View view, MotionEvent motionEvent) {
if (Dpad.isDpadDevice(motionEvent)) {
int press = mDpad.getDirectionPressed(motionEvent);
switch (press) {
case Dpad.UP:
// Do something for UP direction press
UP(); // Change the video to next
return true;
case Dpad.DOWN:
DOWN(); // Change the video the earlier on
return true;
}
}
return false;
}
});
编辑
它现在成了一个问题,因为它对任何运动都没有反应。我尝试了一个带有物理键盘的模拟器,但没有一个动作发生。如果有人给我一个暗示,我会感激的。
我指的是下图中的这种遥控器
提前感谢我认为Android开发者的代码是错误的:
public static boolean isDpadDevice(InputEvent event) {
// Check that input comes from a device with directional pads.
if ((event.getSource() & InputDevice.SOURCE_DPAD)
!= InputDevice.SOURCE_DPAD) {
return true;
} else {
return false;
}
}
条件应该是“==”而不是“!=”,因此这是正确的:
public static boolean isDpadDevice(InputEvent event) {
// Check that input comes from a device with directional pads.
if ((event.getSource() & InputDevice.SOURCE_DPAD)
== InputDevice.SOURCE_DPAD) {
return true;
} else {
return false;
}
}
很抱歉问一下,你搜索过了吗?假设你说的是Nexus播放器(这是一台Android电视),它的蓝牙遥控器有一个D-pad(这是一个技术术语,它的意思是定向板,D-pad是你应该在Android电视的官方文档中搜索的)。我的一个问题是我不知道该搜索什么。使用什么关键词:(我最终使用的是遥控器appsHere。看看这段代码。这是谷歌电视(Android电视的前身)使用的代码。它是由谷歌电视开发倡导者撰写的。我不知道这个项目现在是否仍然相关,甚至在新的安卓电视上是否仍然有效。但无论如何,它可能值得一看。我为samsunage Googel TV开发了相同的应用程序。我想它可以使用。我用同样的东西开发了自定义遥控器.关于手势此应用程序已实现从左到右的手势。