In a WebView, tapping <input type="file"> calls the app's file chooser; if the app doesn't implement one, nothing happens. Camera capture also needs the CAMERA permission and a place to store the photo; downloads need a download listener; location needs a geolocation prompt plus location permission. Use a converter that supports these, then make your site's inputs explicit with accept and capture.
Uploads: what the site should send
The WebView passes your input's attributes to the app, which uses them to choose what to show:
<!-- gallery or files, images only --> <input type="file" accept="image/*"> <!-- open the camera straight away --> <input type="file" accept="image/*" capture="environment"> <!-- several documents --> <input type="file" accept=".pdf,.doc,.docx" multiple>
Be specific. A bare <input type="file"> may open a generic file browser that confuses people looking for their photos.
Camera: permission plus a file to save into
To take a photo, the app asks Android's camera to save into a temporary file and returns that file to your page. That needs the CAMERA permission in the manifest and a runtime prompt the first time. If your form needs photos, tell the converter to include camera support; if it doesn't, leave it out — fewer permissions means fewer Play questions.
Video and audio inside the page
For getUserMedia() (live camera or microphone in the page, such as video calls or QR scanners), the WebView asks the app to grant the permission. Without native support the call fails silently. Test it explicitly if your site scans QR codes or records voice.
Downloads
- Normal links to files (
/invoice.pdf): the app needs a download listener that hands the file to Android's download manager, so it appears in notifications and the Downloads folder. - Files behind a login: the download manager doesn't have the WebView's cookies unless the app passes them. If invoices download as an HTML login page, that's why.
blob:anddata:URLs (made by JavaScript, common for CSV exports): the download manager can't fetch them. The app must read them through JavaScript, or your site can offer a real URL for the file instead.
Location
Store finders and delivery forms call navigator.geolocation. The app needs location permission in its manifest and must answer the WebView's geolocation prompt. Ask only when the user taps “Use my location”, not on page load — Android shows two prompts (app, then site) and people decline the second when it comes out of nowhere.
Quick diagnosis
| Symptom | Likely cause |
|---|---|
| Tapping “Choose file” does nothing | No file chooser in the app shell |
| Gallery opens but camera option missing | No camera permission, or no capture/accept |
| Download shows “unsuccessful” | Cookies not passed, or a blob: URL |
| QR scanner shows a black box | getUserMedia permission not granted by the app |
FAQ
Why doesn't file upload work in WebView?
The WebView doesn't open a file picker by itself; it asks the app to. If the app shell lacks a file chooser implementation, the tap is ignored.
Can a URL app upload multiple photos?
Yes, if the input has multiple and the app's chooser supports multi-select.
Do PDFs open inside the app?
WebViews can't render PDFs inline like Chrome. Download them, or open them with the phone's PDF viewer.