如何以编程方式区分AndroidTV上的电视和STB /游戏机?此方法(https://developer.android.com/training/tv/start/hardware)不起作用,因为运行AndroidTV的STB被视为电视。
答案 0 :(得分:0)
这样做的明显原因是确定设备是否适合玩游戏。如果出于任何其他原因,则需要详细说明目的,以便获得适用的帮助。
由于不可能直接查询设备类型 - 就个人而言,我会寻找只有游戏机可能具有的东西。
换句话说:游戏控制器/游戏手柄。
public ArrayList<Integer> getGameControllerIds() {
ArrayList<Integer> gameControllerDeviceIds = new ArrayList<Integer>();
int[] deviceIds = InputDevice.getDeviceIds();
for (int deviceId : deviceIds) {
InputDevice dev = InputDevice.getDevice(deviceId);
int sources = dev.getSources();
// Verify that the device has gamepad buttons, control sticks, or both.
if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD)
|| ((sources & InputDevice.SOURCE_JOYSTICK)
== InputDevice.SOURCE_JOYSTICK)) {
// This device is a game controller. Store its device ID.
if (!gameControllerDeviceIds.contains(deviceId)) {
gameControllerDeviceIds.add(deviceId);
}
}
}
return gameControllerDeviceIds;
}
当然,这不是万无一失的。显然,如果当时拔下游戏手柄(不确定何时会发生),则不会返回任何内容。更不用说,一些电视支持游戏手柄(三星首先想到) - 但是,如果您打算确认应用程序有足够的输入可用,这将是理想的。
如果游戏手柄不存在,可能会显示一条消息,说明“请连接游戏手柄”。 - 连续检查后台,并在检测到一个后自动继续。