troubleshooting
Why won't my phone scan a QR code?
Your phone won't scan a QR code? A quick, friendly fix-it list — camera settings, the tap-to-open banner, focus and lighting, and the screenshot trick — for iPhone and Android.
If you’re pointing your phone at a code and nothing happens, it’s usually a 30-second fix — and rarely a broken phone. Every iPhone (iOS 11+) and almost every Android (8+) reads QR codes straight from the built-in camera app, no separate scanner needed. Here’s how to get it working, and how to tell when the problem is actually the code, not you.
First: is your camera set to scan?
On iPhone, QR scanning lives in the normal Camera app and is on by default — but it can be switched off. Open Settings → Camera and make sure Scan QR Codes is turned on. Then just open the Camera (rear lens) and hold it over the code — you don’t press the shutter.
On most Android phones it’s the same: open the camera and aim. If nothing pops up, open Google Lens (in the Google app, or the Lens button inside the camera) and point it at the code — on older or stripped-down phones that’s the reliable route.
”It showed a banner but nothing opened”
This one catches everyone. Your phone recognises the code and shows a little notification or yellow banner at the top or bottom of the screen — but you have to tap it to actually go anywhere. Point the camera, wait a beat for the banner, then tap it.
Still nothing appearing? On iPhone there’s a dedicated Code Scanner you can add to Control Center (or find via Spotlight search) — it’s a bit more eager than the Camera app and worth a try when a code is being stubborn.
Hold it like the camera wants
Cameras need a moment to focus and enough of the code in frame:
- Distance matters both ways. Too close and it can’t focus; too far and the squares are too small to read. Around 15–30 cm (6–12 in) is the sweet spot for a card- or menu-sized code. Bigger codes want more distance.
- Hold steady for a second or two so autofocus can lock — don’t sweep past it.
- Fill a good chunk of the frame with the code, straight-on rather than at a steep angle.
Lighting and glare
- Too dark and the camera can’t tell the dark squares from the light ones. Move somewhere brighter.
- Glare is the sneaky one — overhead lights, sun or your own flash bouncing off a glossy menu, laminated card or phone screen washes the pattern out. Tilt the phone 10–15° to throw the reflection off to one side, or move the code out of the direct glare.
The quick housekeeping checks
- Wipe the lens. A smudged rear camera is the single most overlooked cause — a fingerprint softens the whole image. Give it a wipe.
- Camera permissions. If you’re using a separate scanner app rather than the built-in camera, it needs camera access: iPhone → Settings → the app → toggle Camera on; Android → Settings → Apps → the app → Permissions → Camera.
- A quick restart clears the odd temporary glitch if the camera’s behaving strangely generally.
Scanning a code that’s already on your screen
You can’t always point one phone at another. If the QR code is in a photo, screenshot or a message on your own phone, you don’t need the camera at all:
- iPhone: open the image in Photos, then tap the Live Text / link button, or press and hold the code — iOS offers to open it.
- Android: open the image and tap the Google Lens button, or take a screenshot and use Lens from there.
Handy when someone’s texted you a code, or it’s on a webpage you’re already looking at.
Still nothing? Then it might be the code
If you’ve tried all of the above on more than one code and your phone scans other codes fine, the phone isn’t the problem — that particular code probably is. Common culprits: it’s printed too small, has no white margin around it, sits on a busy or low-contrast background, or it’s blurry, curved or damaged. That’s a whole checklist of its own — see why won’t my QR code scan? for the code-side fixes.
Making your own?
If you’re here because a code you made won’t scan for other people, the fix is almost always in the design. Start with what makes a good QR code, then make a clean one at dottr — it’s free, runs entirely in your browser, and previews the code so you can sanity-check it before you print.