We’ve talked a lot about game controllers on the site, and unfortunately the number of articles make it hard to get the big picture at this point. We need a place to collect all that information so that new users can easily get started, so that’s what this guide is for. Read on to learn all about using game controllers on Android.

What controllers can I use?

Game controller support on Android is all over the place. Some more recent devices can actually use controllers directly over USB, and the support is built right into the OS. For the most part however, third party software is needed in order to get it working, and is definitely needed to get the most functionality. USB/BT Joystick Center is the software solution we talk about the most, because it’s sort of an all-in-one solution to get game controllers to work.

With that app, or similar ones, it’s generally possible to get any normal controller that connects over USB to work. Some generic controllers might not work out of the box with the apps, but can in some cases be made to work in a more manual way. To give you some concrete list on what controllers will work, I will simply copy/paste the current compatibility list of USB/BT Joystick Center:

Wireless:
- PS3 Controller without root (* CSR Bluetooth 2.x/EDR+ USB Stick is needed)
- X360 Controller (“Microsoft Wireless Gaming Receiver for PC” USB is needed)
- Bluetooth Keyboards
- iCade
- iControlPad (SPP Mode)
- PhoneJoy
- Wii Remotes 1-4 + Nunchuck + Classic
- Zeemote

USB:
- X360 Controller – Wired
- PS3 Sixaxis – Wired
- Hyperkin N64 Moonlight Controller 
- Logitech (Rumble, F310, F710)
- Microsoft Sidewinder 2 Precision
- Trust GXT 24
- X360 Rockband: USB Guitars + Drums
- N64 “Controller Adapter for PC USB” (for 2 Controllers)
- PSX 1/2 “USB Gamepad Converter Dualschock” with 2 Player support
- PSX + N64 USB Dual Converter 
- SNES “Controller Adapter for PC USB”
- C64/Atari/Amiga “Donalds USB-Joystickadapter” for 2 Players
- C64/128/A600 “Keyrah” USB Keyboard + 2 Joysticks Adapter 
- Stelladapter 2600 to USB
- “PC/Gamepad/Joystick Adapter” (15 Pin D-Sub)
- PSX – USB 4 “Buzz Junior” Wired Controllers
- PSX 1/2 (EAXUS) “Super Dual Box Advanced” Adapter for PC USB

As you can see this is quite a comprehensive list. The controllers that work with the most devices are those that are made to connect over Bluetooth without the use of a proprietary protocol. That means normal Bluetooth keyboards, and Bluetooth controllers made for mobile devices, like the PhonejoyiControlpadiCade 8-bitty, and Zeemote to name a few.

The second most compatible controller has got to be the Nintendo Wiimote, which can use add-ons like the Classic controller to make it more gamepad-like.  The compatibility depends on the device though, and apps like Wiimote Controller which handles the communication between controller and device outright states that it’s not compatible with a lot of HTC and Samsung devices.

Next up you have USB controllers. Whether or not those will work depends on the device, specs of the USB support for a device (if it has that feature at all), and in a lot of cases requires an adapter to hook to the tablet via USB. Here’s an example of such an adapter for Samsung’s Galaxy Tabs

The most difficult controller to get working is the PS3 Sixaxis Controller in wireless mode. USB/BT Joystick center can do this by using a special USB Bluetooth dongle connected to the tablet via USB. It’s also possible to get it working on rooted devices, but compatibility isn’t 100% there either.

How do the controllers interact with the device?

Keyboard emulation

Assuming you’re using third party apps and not native game controller support, the method that the apps use to handle the communication between controller and app/game end up confusing a lot of people. That’s a problem because understanding how it works is pretty crucial in the cases where it doesn’t work. I won’t lie to you, I’ve seen the setup of game controllers confusing people who find flashing ROMs to be a piece of cake, so it’s not exactly the same as logging into the official Facebook Android app.

The most common method that these apps use is to emulate a keyboard. The app that handles the controller will receive button input from the controller, and then in turn translate that input to keyboard buttons. You press the down button on the d-pad of a controller, and the app tells your Android device that someone just pressed the arrow key down on a keyboard. Keyboard support is built into Android after all, so why not use a system that is already there? Don’t be confused by button names and what they correspond to on this virtual keyboard however, d-pad down can just as easily be made to appear as X on a keyboard, and the X button on a Playstation controller can be arrow down on the virtual keyboard. The apps that handle the controllers let you change these button/keyboard matches as you want, and you can even program buttons to act like special hardware keys, like media playback. A Wiimote works perfectly as a music/video remote control if you e.g. program the up/down left/right arrows to be volume up/down, previous/next track respectively – because volume and track skipping are built into Android as media buttons.

Because this method is used to interact though, you have to enable a special keyboard to make it work. Android supports third party keyboards, which is how you can install new on-screen keyboards from Google Play. In order for apps to translate controller input into keyboard input, they need to use what’s essentially a fake on-screen keyboard. This keyboard is installed when you install the apps, and you have to enable it to make it work. You have to enable it twice: When you first install the app, you have to activate that input method under Language and input -> Configure input methods in the device’s main settings. This doesn’t actually enable the keyboard, it just activates it so it will show up as a selectable keyboard in the list. This is a security measure since soft keyboards can in theory log your passwords and such. In theory, don’t get alarmed by Android’s notifications, they’re only warning about the potential, not actual threats.

The second time you have to enable it is every time you want to use your controller, because you need to select that keyboard instead of the soft keyboard you normally use. You do this under “Current input method” in “Language and input”, or you simply use the shortcuts that most of the apps provide you. You then switch to the right keyboard (normally named something along the lines of the app you’re using to handle controller input, e.g. USB/BT Joystick Center’s keyboard is called USBjoyIME,) and in doing so, lose the ability to bring up your normal soft keyboard until you switch back. No texing while playing with a controller, in other words.

At this point your controller inputs will be recognized as keyboard inputs by Android. That means it’s time to get the game to recognize keyboard input. Not many games support this, and to make matters worse, they don’t all use the same method. Some games allow you to map game features to keyboard buttons, but other games have pre-set keyboard buttons that they have been mapped to, meaning that you actually have to do the key mapping in the game controller app. Examples of such backwards apps are Shadowgun and GTA 3, and you can find key mappings for those games on the UB/BT Joystick Center forums (Shadowgun, GTA 3). As an example, Shadowgun recognizes the keyboard button “7″ as a command to reload. In order to make e.g. the circle button on a PS3 controller reload the weapon, you then have to go into the app that controls the PS3 controller and map the circle button to the 7 key on the virtual keyboard. Other apps, especially game emulators, allow you to do it the other way around – the circle button can be mapped to whatever keyboard key you want it to be, and the game will then let you map that button to the reload feature instead. For such games, you don’t even need to remember what you mapped a button to, as they will let you select a game feature (like “reload”) and then simply press the controller button you want that feature mapped to.

 Setting up the apps – in practice

We’re not in Facebook anymore

Despite all of this information you’ve just been presented, you’re not guaranteed to get anything working. To put it simply, this isn’t the Facebook Mobile app – it’s not as simple as installing and app and having everything work out of the box. Functionality is going to depend on your device, your device’s software version, ROM, whether you’re rooted, and so on. If you’re lucky, you can retrace the steps I’ve taken in the videos and have it work right away. if you’re less lucky, you need to troubleshoot, and that’s why you need to know how everything interacts in order to find where the error is. If button input works in USB/BT Joystick Center but not in the app for instance, it’s like that some setting in the app is not configured correctly, or that you simply forgot to enable the right IME device.