Dev

Intent & Deep Link Builder

Compose Android intent:// URIs and adb shell am start commands visually. Outputs update live as you type.

  • Runs locally
  • No uploads
  • Works offline

Intent builder

Deep links and intent URIs

URI components

String extras

Output

intent:// URI
adb shell am start
Intent URIs are built locally in your browser. Nothing is uploaded.

About this tool

This builder turns the form fields into two live outputs: a fully-formed intent:// URI ready to embed in HTML or JavaScript, and the equivalent adb shell am start command for testing from a terminal. Both update as you type.

String extras let you pass arbitrary key-value data to the receiving Activity. Each extra is appended as ;S.key=value in the URI and is available in code via getIntent().getStringExtra("key").

Intent URI format

The intent:// scheme is defined by Chrome's Intent syntax for Android. The full structure is:

intent://<host>/<path>#Intent;
  scheme=<scheme>;
  package=<pkg>;        (optional)
  action=<action>;      (optional)
  S.key=value;          (string extras, optional)
end
  • scheme: the custom URI scheme your app registers (e.g. myapp).
  • package: restricts launch to a specific app; omit to allow any matching handler.
  • action: an Android Intent action such as android.intent.action.VIEW.
  • S.key: a string extra; prefix determines type (S=String, i=int, b=boolean; this tool covers strings only).

Tips

  • Leave Package blank if you want any app that handles the scheme to open, not just one specific app.
  • Set Action to android.intent.action.VIEW for standard content viewing; use custom actions for app-specific flows.
  • Test the adb command on a connected device or emulator: paste it into a terminal with the device attached.
  • To use the intent URI in a web page, wrap it in an anchor tag: <a href="intent://...">Open in app</a>.
  • Extra values with spaces or special characters are automatically percent-encoded.

About the Intent and Deep Link Builder

Android apps can be opened from a URL using a custom URI scheme or via an intent:// URI. This tool builds both the URI and the matching terminal command without requiring you to remember the exact syntax or percent-encode extras by hand.

What is an intent:// URI?

Chrome on Android parses intent:// URIs natively. When the user taps a link that uses this scheme, Chrome reads the #Intent; fragment, reconstructs an Android Intent object, and calls startActivity(). If no matching app is installed and a package is specified, Chrome redirects to the Play Store. This lets web pages launch apps reliably across Android versions.

Custom scheme URIs vs. intent:// URIs

A plain custom scheme URI such as myapp://product/123 is simpler but less reliable: any app can claim the scheme, Android may show an ambiguous chooser dialog, and there is no built-in fallback. An intent:// URI is more explicit because it names a package, specifies an action, and carries typed extras, all in a single string that browsers understand.

Testing with adb am start

The adb shell am start command drives the Android Activity Manager directly from your development machine. The -a flag sets the Intent action, -d sets the data URI, and -n targets a specific component. Because it bypasses the browser, it is the fastest way to verify that your Activity is receiving and handling the right Intent during development.

Frequently asked questions

What is an intent:// URI?

It is a Chrome-defined URI format that encodes a full Android Intent in a URL. Chrome parses it and calls startActivity() on the user's device, launching the target app or falling back to the Play Store.

How do I register a custom scheme in my Android app?

Add an <intent-filter> to your Activity in AndroidManifest.xml with a <data android:scheme="myapp"/> element and android.intent.action.VIEW plus android.intent.category.DEFAULT and android.intent.category.BROWSABLE.

What do the S., i., and b. prefixes mean in extras?

They indicate the Java type: S. for String, i. for int, b. for boolean. This tool generates S. (string) extras only, which is the most common case.

Why does my intent URI not open the app?

Check that the scheme and host match your manifest intent-filter exactly, the package name is correct, and the Activity is exported. Also confirm you are testing on an Android device or emulator, since intent:// links only work in Chrome for Android.