Gamepad controller output into Android application

82 Views Asked by At

I am interested in using a gamepad controller, (X-Box, etc) to provide input to an Android application that I have written. Data is passed over Bluetooth. This is what I have so far...

public class MainActivity 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);
  }
}
1

There are 1 best solutions below

0
portsample On BEST ANSWER

This works.

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.ACTION_DOWN));
}

//Below will keep the X-Box Controller B key from doing a "back button" event and pausing your app when pressed.
@Override
public void onBackPressed() {
    //super.onBackPressed();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BUTTON_A: //code 96, 23
                Toast.makeText(this, "Button press was A", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_B: //code 97, 4
                Toast.makeText(this, "Button press was B", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_Y: //code 100, 62
                Toast.makeText(this, "Button press was Y", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_X: //code 99,67
                Toast.makeText(this, "Button press was X", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_DPAD_UP: //code 19
                Toast.makeText(this, "Clover/Left joystick press was UP", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_DPAD_DOWN://code 20
                Toast.makeText(this, "Clover/Left joystick press was DOWN", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_DPAD_LEFT://code 21
                Toast.makeText(this, "Clover/Left joystick press was LEFT", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_DPAD_RIGHT://code 22
                Toast.makeText(this, "Clover/Left joystick press was RIGHT", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_R1://code 103
                Toast.makeText(this, "RIGHT SHOULDER button press", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_L1://code 102
                Toast.makeText(this, "LEFT SHOULDER button press", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_SELECT://code 109, 82
                Toast.makeText(this, "LEFT CENTER button press", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_START://code 108,23
                Toast.makeText(this, "RIGHT CENTER button press", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_MEDIA_RECORD://code 130
                Toast.makeText(this, "CENTER CENTER button press", Toast.LENGTH_SHORT).show();
                break;
            case KeyEvent.KEYCODE_BUTTON_THUMBL://code 106, 23
                Toast.makeText(this, "Left Joystick depress", Toast.LENGTH_SHORT).show();
                break;
        }
    return super.onKeyDown(keyCode, event);
}
}