androidgamepad

Gamepad controller output into Android application


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

Solution

  • 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);
    }
    }