我有兴趣编写一个通过蓝牙接收来自游戏手柄控制器的输入的应用程序。 这就是我到目前为止所拥有的...
public class XboxControllerActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xbox_controller);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getSource() == InputDevice.SOURCE_GAMEPAD) {
// Xbox controller button pressed
switch (keyCode) {
case KeyEvent.KEYCODE_BUTTON_A:
Toast.makeText(this, "Button press was A", Toast.LENGTH_LONG).show();
break;
case KeyEvent.KEYCODE_BUTTON_B:
Toast.makeText(this, "Button press was B", Toast.LENGTH_LONG).show();
break;
}
return true; // Event handled
}
return super.onKeyDown(keyCode, event);
}
}
...但是游戏手柄事件是由 Android 操作系统而不是我的应用程序捕获的。应用程序如何获得游戏手柄事件的焦点?
这有效。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Toast.makeText(this, "Button press was " +keyCode, Toast.LENGTH_SHORT).show();
switch (keyCode) {
case KeyEvent.KEYCODE_BUTTON_A:
Toast.makeText(this, "Button press was A", Toast.LENGTH_LONG).show();
// Handle A button press
break;
case KeyEvent.KEYCODE_BUTTON_B:
Toast.makeText(this, "Button press was B", Toast.LENGTH_LONG).show();
// Handle B button press
break;
case KeyEvent.KEYCODE_BUTTON_2:
Toast.makeText(this, "Button press was 2", Toast.LENGTH_LONG).show();
// Handle B button release
break;
case KeyEvent.KEYCODE_BUTTON_1:
Toast.makeText(this, "Button press was 1", Toast.LENGTH_LONG).show();
// Handle B button release
break;
// Add more cases for other buttons
}
return super.onKeyDown(keyCode, event);
}