我如何确定哪些是输入设备的android系统的来源? [英] How do I determine what is the source of Input Device in android?

查看:269
本文介绍了我如何确定哪些是输入设备的android系统的来源?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我与的InputDevice .getSources工作()方法确定的InputDevice的类型(源)。但是,而不是返回predetermined整数,它返回一个联合位域,例如:16786707(这是从我的游戏手柄的实际值)

正如你所看到16786707未在的InputDevice 说明文档页面,因为它是在飞行中产生的。我如何解析号16786707,以确定是否的InputDevice是:一个 SOURCE_CLASS_JOYSTICK (16),或 SOURCE_GAMEPAD (1025)或 SOURCE_JOYSTICK (16777232)。我的目标是在初始化方法来确定的InputDevice是像Xbox 360手柄或任何其他游戏手柄一个手柄。


解决方案

 字节INT名
-------------------------------------------------- -----------
1000000000010010100010011 // 16786707< - 设备
                    10000 // 16< - SOURCE_CLASS_JOYSTICK
              10000000001 // 1025< - SOURCE_GAMEPAD
1000000000000000000010000 // 16777232< - SOURCE_JOYSTICK

该器件是一款游戏手柄,操纵杆和class_joystick(猜这意味着它的操纵杆)。

您将需要使用和检查什么:

  INT设备= 16786707;
布尔is_source_class_joystick =((设备及放大器; SOURCE_CLASS_JOYSTICK)== SOURCE_CLASS_JOYSTICK);
布尔is_source_gamepad =((设备及放大器; SOURCE_GAMEPAD)== SOURCE_GAMEPAD);
布尔is_source_joystick =((设备及放大器; SOURCE_JOYSTICK)== SOURCE_JOYSTICK);

这应该工作。

编辑:我还检查,它也可以被认为是一个键盘和鼠标

I have to work with the InputDevice.getSources() method to determine the type (source) of InputDevice. But instead of returning a predetermined integer, it returns a combined bitfield, for example: 16786707 (this is an actual value from my gamepad).

As you can see 16786707 is not listed in the InputDevice documentation page because it is generated on the fly. How do I parse the number 16786707 to determine whether the InputDevice is: a SOURCE_CLASS_JOYSTICK (16), or a SOURCE_GAMEPAD (1025), or SOURCE_JOYSTICK (16777232). My goal is to determine in a initialization method if the InputDevice is a gamepad like the Xbox 360 gamepad or any other gamepad.

解决方案

                bytes          int        name
-------------------------------------------------------------
1000000000010010100010011  //16786707 <- Device
                    10000  //16       <- SOURCE_CLASS_JOYSTICK
              10000000001  //1025     <- SOURCE_GAMEPAD
1000000000000000000010000  //16777232 <- SOURCE_JOYSTICK

The device is a GamePad, a Joystick, and a class_joystick (guess that means its a joystick).

You'll need to use AND to check what:

int device = 16786707;
boolean is_source_class_joystick = ((device & SOURCE_CLASS_JOYSTICK) == SOURCE_CLASS_JOYSTICK);
boolean is_source_gamepad = ((device & SOURCE_GAMEPAD) == SOURCE_GAMEPAD);
boolean is_source_joystick = ((device & SOURCE_JOYSTICK) == SOURCE_JOYSTICK);

This should work.

Edit: I also checked, it can also be considered a keyboard and a mouse.

这篇关于我如何确定哪些是输入设备的android系统的来源?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆