Distinguish explicit and implicit intents
An explicit intent names a component; an implicit intent describes an action and optional data/type. Check the exact values before adding manifest filters randomly.
The manifest reference explains component declarations. A misspelled class name or component excluded from the selected build variant cannot be repaired by changing the caller's MIME type.
Verify the requested capability
| Intent detail | Common mismatch |
|---|---|
| Action | Receiver expects another action |
| URI scheme | No installed app supports it |
| MIME type | Too specific or inconsistent with the data |
| Explicit component | Package/class absent or renamed |
| Categories | Filter does not match the request |
Use a real supported test target and also test a device without that target installed.
Account for package visibility
Android package visibility can affect queries about installed handlers. A query result and the ability to attempt an activity launch are related but not identical APIs; follow the documented rules for the operation.
Do not request broad package visibility merely to avoid understanding a narrow intent contract.
Provide a safe fallback
Catch the launch failure at the user-action boundary and offer a meaningful alternative, such as choosing another supported app or explaining that no compatible handler is available.
Avoid silently losing a file or leaving a disabled button after the failed launch. Keep any temporary URI permission limited to the intended recipient and operation.
Test installed and missing-handler states
APKLint's Manifest Checker can inspect declared components and filters, but it cannot know which apps are installed on a user's device. The acceptance test must include the exact intent on relevant devices, including the no-handler case and the selected release variant.
Design for a device with no PDF viewer
Suppose an export screen sends an ACTION_VIEW intent for a PDF. Record the actual URI, MIME type, categories and flags without exposing the document's contents. Use a content URI with the appropriate temporary read grant when sharing an app-owned file. A filename ending in PDF is not a substitute for a correct MIME type, and an inaccessible URI is a different failure from having no matching activity.
The exception reference defines the missing-handler case. Handle it at the launch boundary and offer a useful alternative, such as returning to the saved file or choosing another supported sharing flow. Do not report that the export itself failed if the document was created successfully and only the external viewer was unavailable.
Separate package queries from starting an activity
Android's package-visibility use cases explain that querying available applications and launching an implicit intent have different visibility considerations. Avoid requesting broad installed-app visibility merely because a preflight query returned no result. Follow the documented narrow query declaration when the product actually needs to inspect handlers, and still handle a launch failure because device state can change.
For an explicit intent to your own activity, inspect the merged manifest, enabled state and selected application variant. A renamed class or a component omitted from one flavor requires a packaging or declaration fix. Changing the MIME type cannot repair that explicit-component error.
Test the export on one device with a compatible viewer and another without one. Cancel a chooser, deny an unrelated request and return from the external app; the original screen should remain usable and the generated file should remain available according to the app's retention policy. Include filenames with spaces and a document from the actual provider used in production. If the receiving activity opens but cannot read the file, investigate URI access separately and show an honest error. Keep success messages precise enough that users can distinguish file creation, handoff and successful viewing, since those stages do not share a single guaranteed outcome.
Sources and further reading
Reference review: 29 September 2026. Examples illustrate the workflow; check your installed versions, release artifact and account-specific Console requirements before applying them. This guide is not a claim that APKLint executed your project or verified your private account.


