Search the Play Store for a controller tester and you will find a long list of apps wanting camera permissions, storage access and location data to tell you whether your left stick works. None of that is necessary. Android's own Chrome browser can read a connected controller directly through the same web standard your desktop uses, with nothing to install and nothing to grant access to beyond the page you are already looking at.
Understanding why this works, and specifically the two separate layers involved, also explains most of the connection problems people run into, which a plain how-to skips past.
Two layers, not one
This is the part worth understanding before anything else, because it explains almost every failure mode you will encounter.
Android has native, operating-system-level support for game controllers built into the platform itself, independent of any browser or app. This is why a controller can navigate a phone's home screen or work inside many native Android apps with no special setup: the OS recognises it as a standard HID input device and maps its buttons to navigation and input events at the system level.
The browser Gamepad API is a separate layer sitting on top of that. It is a W3C web standard that Chrome, and other Chromium-based browsers, expose to web pages so that JavaScript running on a page can read detailed button and analog stick state directly, rather than the crude directional input the OS layer alone provides. Crucially, the browser can only see a controller that the OS layer has already recognised. If the OS does not detect the device as a valid HID controller, no browser API on top of it will either.
This explains a specific, common complaint people run into and rarely understand: a controller navigates your phone's menus and settings just fine, but a browser test page shows nothing. That means the OS layer is working correctly and the browser is either not receiving the input for a separate reason, or the site itself has an issue, rather than a connection problem. The opposite, where nothing works at all, not even basic navigation, points at the OS layer itself failing to recognise the device, which is a genuine connection or hardware problem rather than a browser issue.
Connecting it
Over Bluetooth, pair the controller the same way you would pair headphones: Settings, then Bluetooth, put the controller into pairing mode, and select it from the list. Once paired at the system level, it is available to any app or browser page that wants to read it.
Over USB, you need your phone to support USB On-The-Go, generally abbreviated OTG, which allows the phone to act as a host for other USB devices rather than only being a device itself. Most modern Android phones support this natively, but not universally, and a small number of budget models do not support USB host mode at all, in which case no cable or adapter will make wired connection work. A basic USB-C OTG adapter, inexpensive and widely available, is often all you need if your phone's own port does not directly accept the controller's cable.
The wake step people miss
Once connected, open a controller test page in Chrome and press any button on the controller before expecting to see anything. This is not an Android quirk specifically, it is how the Gamepad API works everywhere, on desktop as well as mobile: browsers do not populate a connected gamepad's data until they receive an actual input from it, as a privacy and security measure that prevents a webpage silently fingerprinting connected hardware without your interaction. If a page shows no controller detected, press a button before assuming anything is actually wrong.
What genuinely works well, and what to be honest about
Buttons, sticks and triggers read reliably through Android Chrome's implementation of the Gamepad API, and this is the part worth trusting for the actual diagnostic work: press every button and watch it register, sweep both sticks through their full range and watch the reported values, pull each trigger slowly and confirm a smooth climb with no dead spots.
Two areas are worth a more honest caveat than most guides give them. Vibration and haptic feedback support through the browser on Android is less consistent than on desktop, varying by specific phone, Chrome version and controller combination, so treat a lack of response on a vibration test run from a mobile browser as inconclusive rather than a confirmed fault, and where possible cross-check on a desktop browser before concluding the motors themselves are bad. Gyroscope data from the controller itself, as distinct from the phone's own built-in motion sensors, is also not consistently exposed through the mobile Gamepad API the way it is on desktop, so do not rely on a phone-based test to confirm or rule out a controller's own motion sensors.
Things specific to Android that interfere with a clean test
Game mode and performance booster overlays. Several phone manufacturers, Samsung's Game Booster among the most common, run background overlays during gaming that can intercept controller input before it reaches a browser tab. If a browser test page is not responding correctly to a controller that clearly works elsewhere on the phone, checking whether one of these modes is active is worth doing before assuming a hardware fault.
A controller's own companion app running in the background. Several third party controllers, GameSir and 8BitDo models in particular, ship a companion app for firmware updates and remapping. If that app is running and has claimed exclusive access to the controller, a browser tab may see nothing at all even though the OS-level connection is genuinely fine. Close the companion app before testing, the same principle as closing Steam Input or a remapping tool before testing a controller on PC.
Battery saving restrictions on the browser tab itself. Aggressive battery management on some Android skins can throttle or suspend background browser activity, which can interrupt a test if you switch away from the tab mid-test. Keep the test page in the foreground while you are actually running it.
Testing on the spot, practically
This matters beyond troubleshooting your own controller. A phone in your pocket with no app installed is often the only testing tool available during an in-person sale of a used controller, and being able to run a real diagnostic on the spot, rather than trusting a seller's description, is genuinely useful leverage. Our guide on what to test before buying a used controller covers the full checklist, and everything in it works from a phone using exactly the method described here.
Run a stick drift test, a button test and a trigger test the same way you would on a desktop, watching for the same patterns: a resting stick value near zero, buttons that register consistently rather than intermittently, and triggers that climb smoothly with no pauses partway through the pull. None of it requires anything beyond the browser already installed on the phone.
Frequently Asked Questions
Q: Do I need to install an app to test a controller on Android?
Q: My controller works for navigating my phone but a browser test shows nothing. What's wrong?
Q: Can I connect a controller to Android over USB?
Q: Does controller vibration work when testing on Android?
Q: Why does my controller register on my phone but not respond to any button presses in the browser?
Free Online Gamepad Tester
Test your controller for drift, deadzones, and input lag â no download required.
Launch Tester â