To find out why an Android intent launches the wrong activity—or why a deep link opens in a browser—capture the complete intent, check the installed app’s merged manifest, and reproduce the same launch with ADB. Implicit activity launches must match an eligible filter’s action, data, and categories; App Links add domain-verification requirements. The commands and resolver diagnostics available depend on the device’s Android version.
Why isn’t my Android intent opening the right activity?
An implicit intent does not name its destination activity. Android searches for an eligible activity by matching the intent against manifest filters. The action, data, and categories all matter; Android describes this three-part comparison in its intent and intent filter documentation.
Capture the complete intent
Record the intent at the point it is created and, if an activity receives it, at the point of receipt. Include:
- Action and data URI.
- MIME type, if present.
- Categories, extras, and flags.
- Any package or explicit component restriction.
A visible URL is not the whole intent: data can be paired with a MIME type. An explicit component names a destination and bypasses ordinary implicit filter resolution, so distinguish that launch path from one that relies on filters.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
Check the installed build’s merged manifest
Inspect the merged manifest for the build actually installed on the device, not just a source manifest. For each candidate activity, compare the filter with the captured intent:
- Action: confirm the spelling and that the filter declares the action being sent.
- Categories: an implicit activity launch requires a filter that includes
CATEGORY_DEFAULT. Browser-facing links also needCATEGORY_BROWSABLE. - Data: check the specified scheme, host, port, path, and MIME type against the intent. An omitted host or path constraint can make a filter match more broadly than intended.
Check every filter on the activity: failure to match one filter does not rule out another. Also remember that filters are not a security boundary—another app that knows a component’s name may explicitly start it. Android advises using explicit intents to start services. See the official intent-filter guidance.
How do I test an Android intent with adb?
Use an installed build on either a physical device or an emulator. ADB lets you reproduce the launch separately from the app’s own navigation logic; Android documents the general activity-start syntax in its ADB documentation.
Rank #2
Reproduce an implicit activity launch
Replace the placeholders with the action, MIME type, and data used in the failing case:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
adb shell am start -W -a <ACTION> -t <MIME_TYPE> -d <DATA>
For an extra, add -e <EXTRA_NAME> <EXTRA_VALUE>. To target a named component explicitly, add -n <PACKAGE>/<ACTIVITY>. Compare the explicit launch with the implicit one only when it helps isolate the issue: explicit targeting can test component startup and subsequent intent processing, but it does not show how Android resolves an implicit intent.
Reproduce a deep link
Use the URI that matters to the case:
adb shell am start -W -a android.intent.action.VIEW -d "https://your-domain.example/path"
Check which activity launches, then inspect app-side diagnostics to confirm the received action and URI. A successful activity launch does not establish that the app’s navigation code consumed the URI or displayed the expected content.
Why does my Android App Link open in the browser?
App Links rely on both an eligible manifest filter and a verified association between the app and the website. Android’s App Links verification guide describes the requirements and the per-domain verification process.
Check the filter and website association
An App Link verification filter uses the VIEW action, both BROWSABLE and DEFAULT categories, and an HTTP or HTTPS scheme. Android requests https://<host>/.well-known/assetlinks.json for each host. Check that the file is valid JSON, is served over HTTPS without redirects, and contains the SHA-256 fingerprint for the app’s signing certificate. If the app is distributed through Google Play App Signing, use the Play app-signing certificate fingerprint rather than assuming the upload certificate is the relevant one. See the asset links configuration guide.
Recommended Free Tools
On Android 12 and later, reset and request verification, then inspect the result:
adb shell pm set-app-links --package <PACKAGE_NAME> 0 all
adb shell pm verify-app-links --re-verify <PACKAGE_NAME>
adb shell pm get-app-links <PACKAGE_NAME>
The device needs internet access. Allow a few minutes for verification to finish before checking the output. A successful domain is reported as verified; none can mean verification is still pending.
Trace redirects and user choices
If the browser still opens the link, check whether the server redirects the URL, including HTTP-to-HTTPS or apex-to-www redirects; whether the manifest’s host and path scope covers the URL; and whether the asset links file has the correct certificate fingerprint. Also check whether the device has a user-selected default link handler. These checks can distinguish a domain-association problem from a mismatch between the tested URL and the app’s declared scope.
How can I see which app will handle this deep link?
On Android 17, ADB’s --debug-link option provides link-resolution diagnostics. Run it on a device with Android 17:
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Best Value
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://your-domain.example/path"
The output can identify candidate packages and activities, matched manifest attributes, App Link verification state, and Dynamic App Link rules. Dynamic rules are ordered: the first matching rule takes precedence, so check exclusions as well as allows. See Android’s App Links debugging documentation.
--debug-link is Android 17-specific, not a universal command for older devices. On Android 12 and later, use pm get-app-links to inspect verification state; use the ADB launch command to reproduce the URI and compare the result on the device’s actual Android version. A physical device and an emulator can both run ADB intent tests; use a physical test device when the failure appears specific to a device or installation.
How do I make the failure reproducible?
Keep the resolution test tied to the intent the app really sends. Change categories or add an explicit component only as a deliberate comparison, not as a substitute for reproducing the failing path. Compare a URI expected to match with a near-miss URI to expose overly broad or overly narrow filter rules.
Save the Android version, installed app build and signing variant, exact ADB command, resolver output, verification state, and URI received by the app together. That record makes it possible to compare behavior across builds and platform versions without confusing filter resolution with app-side routing.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsQuick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




