Java 安卓通过遥控器遥控android电视盒

Java 安卓通过遥控器遥控android电视盒,java,android,android-layout,Java,Android,Android Layout,你已经在市场上看到了那些相当便宜的android电视盒。它们后面通常有一个遥控器,具有一些功能,如点击、滑动或左右上下滑动 最近我制作了一个应用程序,并试图用遥控器导航。我在项目中有一些手势方法。我试着向左和向右滑动,但当我在我的手机上尝试时,这个应用程序没有做任何事情,它有一个屏幕,得到了这个手势,并做了它应该做的事情。比如打开导航抽屉等 现在我的问题是:是否需要使用特殊的方法?是否有一些规则需要注意 编辑 这就是我到目前为止所做的。我创建了一个定义动作的类:它来自google.develop

你已经在市场上看到了那些相当便宜的android电视盒。它们后面通常有一个遥控器,具有一些功能,如点击、滑动或左右上下滑动

最近我制作了一个应用程序,并试图用遥控器导航。我在项目中有一些手势方法。我试着向左和向右滑动,但当我在我的手机上尝试时,这个应用程序没有做任何事情,它有一个屏幕,得到了这个手势,并做了它应该做的事情。比如打开导航抽屉等

现在我的问题是:是否需要使用特殊的方法?是否有一些规则需要注意

编辑 这就是我到目前为止所做的。我创建了一个定义动作的类:它来自google.developer

    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开发了相同的应用程序。我想它可以使用。我用同样的东西开发了自定义遥控器.关于手势此应用程序已实现从左到右的手势。