游戏手柄控制器输出到Android应用程序...如何获得焦点?

问题描述 投票:0回答:1

我有兴趣编写一个通过蓝牙接收来自游戏手柄控制器的输入的应用程序。 这就是我到目前为止所拥有的...

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 操作系统而不是我的应用程序捕获的。应用程序如何获得游戏手柄事件的焦点?

android android-keypad gamepad android-input-filter android-controls
1个回答
0
投票

这有效。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.