美文网首页
Android蓝牙手柄开发

Android蓝牙手柄开发

作者: 超级绿茶 | 来源:发表于2020-09-15 17:11 被阅读0次

    首先拿到手柄后需要在系统的蓝牙设置中配对,必须配对成功后才能进行后续的开发任务。这里以北通手游G1手柄和小米9手机为例:


    IMG_20191120_100910.jpg

    上图就是BETOP W1 BFM就是要配对的手柄名称,在名称下面显示的“已连接”表示手柄和手机连接成功,如果没有这个提示就需要点击手柄名称来连接。

    为了验证手柄是否连接成功最好的办法是装手柄厂商配套的app应用,这里装的是“左游游戏厅”。通过这个app的检验功能可以明确的知道我们的手柄是否和手机连接正常。


    Screenshot_2019-11-20-10-30-03-296_com.zuoyou.cen.jpg

    连接成功后就可以开始我们的开发任何了,手柄和触屏一样都是通过控件的回调事件来获取手柄上的按键信息,但在此之前请注意一定要给你的控件设置焦点,不然会没法响应回调事件;

    android:focusable="true"
    android:focusableInTouchMode="true"
    android:focusedByDefault="true"
    

    然后在代码中设置按键和摇杆的监听事件:

    // 摇杆响应事件
    viewTouch.setOnGenericMotionListener(new View.OnGenericMotionListener() {
        @Override
        public boolean onGenericMotion(View v, MotionEvent event) {
            return false;// 是否把事件传给子控件
        }
    });
    // 按键响应事件
    viewTouch.setOnKeyListener(new View.OnKeyListener(){
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            return false;
        }
    });
    

    如果熟悉触屏的Touch机制的应该很容易明白上述的代码,onGenericMotion和onKey方法都有一个返回值,其作用和onTouch方法的返回值作用,为true说明你已经成功执行按键方法了,事件就结束不会以再传递给其它控件了。

    setOnGenericMotionListener监听所有与MotionEvent.AXIS常量相关的事件,setOnKeyListener监听所有与按键相关的事件。

    现在我们来说一下摇杆事件;

    • MotionEvent定义了一系列以AXIS开头的常量。
    • L2和R2即是按键也是摇杆,所以会触发两种事件。
    • 摇杆的取值范围为0-1.0之间。
    • 摇杆用正负来代表拉动的方向,往右往下为正值,往左往上为负。
    • 摇杆拉着不放时只会触发一次事件,不会连接触发。
    • 左摇杆被拉动时会触发相应的方向按键事件,而且是连接触发按键。
    • 右摇杆的动作不会触发方向键事件。

    接着我们来说一下MotionEvent和KeyEvent定义的相关事件:


    joy.png
    • 按键按下或释放:MotionEvent.ACTION_DOWN、MotionEvent.ACTION_UP
    • 左摇杆:MotionEvent.AXIS_X、MotionEvent.AXIS_Y
    • 右摇杆:MotionEvent.AXIS_Z、MotionEvent.AXIS_RZ
    • 方向键:KeyEvent.KEYCODE_DPAD_DOWN、KeyEvent.KEYCODE_DPAD_UP、KeyEvent.KEYCODE_DPAD_LEFT、KeyEvent.KEYCODE_DPAD_RIGHT、MotionEvent.AXIS_HAT_X、MotionEvent.AXIS_HAT_Y
    • A\B\X\Y:KeyEvent.KEYCODE_BUTTON_A、KeyEvent.KEYCODE_BUTTON_B、KeyEvent.KEYCODE_BUTTON_X、KeyEvent.KEYCODE_BUTTON_Y
    • L1\R1\L2\R2:KeyEvent.KEYCODE_BUTTON_L1、KeyEvent.KEYCODE_BUTTON_R1、KeyEvent.KEYCODE_BUTTON_L2、KeyEvent.KEYCODE_BUTTON_R2
    • select\start:KeyEvent.KEYCODE_BUTTON_SELECT、KeyEvent.KEYCODE_BUTTON_START、

    官方API文档:https://developer.android.com/training/game-controllers/controller-input.html#dpad

    点击链接加入群聊【口袋里的安卓】:https://jq.qq.com/?_wv=1027&k=5z4fzdT
    或关注微信公众号:

    相关文章

      网友评论

          本文标题:Android蓝牙手柄开发

          本文链接:https://www.haomeiwen.com/subject/ryvfyktx.html