48

For my game, I'd like the Android back button to take you to the pause menu, instead of minimizing the game. From what I've googled, I know I need to call

Gdx.input.setCatchBackKey(true);

But how do I actually check for the button press? input.isKeyDown(Keys.BACK) doesn't seem to do anything.

Dmiters
  • 2,011
  • 3
  • 23
  • 31

4 Answers4

78

I solved the problem like this:

public class MyApplication implements ApplicationListener, InputProcessor {
   // !! Remember to override all other required methods !!
   ...

   @Override
   public void create() {
        Gdx.input.setInputProcessor(this);
        Gdx.input.setCatchBackKey(true);
        // rest of your stuff...
   }

   ...

   @Override
   public boolean keyDown(int keycode) {
        if(keycode == Keys.BACK){
           // Do your optional back button handling (show pause menu?)
        }
        return false;
   }

   ...
}

Not copypasta stuff but hopefully this helps you out. :)

raaste
  • 796
  • 6
  • 4
31

You can use Gdx.input.isKeyPressed method.

if (Gdx.input.isKeyPressed(Keys.BACK)){
  // Do something
}
ilhami
  • 411
  • 4
  • 5
  • This is life savior. It's strange why InputProcessor is getting event for back "button" when that class is used for detecting keyboard - for desktop devices. It would be more logical to get this event in GestureListener class. Not to mention that you can set only one InputProcessor. – MilanG Oct 12 '14 at 15:30
  • 2
    @MilanG you can set multiple inputprocessors using a multiplexer, see example here http://stackoverflow.com/a/20048019/22194 – codeulike Oct 13 '15 at 14:48
  • In case you want to handle it in Screens, http://gamedev.stackexchange.com/questions/114972/handling-back-button-in-android-without-implementing-inputprocessor/114985#114985 – kingAm Jan 16 '16 at 20:27
  • Make sure you use `isKeyJustPressed`, not `isKeyPressed`. Just trying it out on my Android, it would sometimes register twice with the latter, which is probably not desirable. – Keenan Thompson Jun 10 '18 at 06:33
21

First create an InputProcessor to handle the back key actions and then add it to a multiplexer so that other components still receive similar events.

      InputProcessor backProcessor = new InputAdapter() {
            @Override
            public boolean keyDown(int keycode) {

                if ((keycode == Keys.ESCAPE) || (keycode == Keys.BACK) )

                // Maybe perform other operations before exiting
                Gdx.app.exit();
                return false;
            }
        };


        InputMultiplexer multiplexer = new InputMultiplexer(mStage,
                backProcessor);
        Gdx.input.setInputProcessor(multiplexer);


And enable catching the back key.

Gdx.input.setCatchBackKey(true);


That's all there is. Good luck!

sheitan
  • 1,076
  • 12
  • 27
2

You can use Gdx.input.isKeyPressed(Keys.BACK) but if you want that Activity does not closes you can handle this as:

Gdx.input.setCatchBackKey(true);
Muhammad Aamir Ali
  • 20,419
  • 10
  • 66
  • 57