-
-
Notifications
You must be signed in to change notification settings - Fork 20
Intent Launcher
The Android Intent Executor allows you to remotely execute Android Intents from Home Assistant: open apps/settings (launch), or send broadcast intents (Home Assistant Companion compatible).
0.6.3 introduced Android broadcast intent support, including both the simpler
broadcast:ACTION_NAMEformat and Home Assistant Companion-style intent fields. 0.6.4 added HA Companion alias keys (intent_action,intent_package_name,intent_class_name,intent_extras) for direct compatibility with HA Companion docs.
Exposes the ESPHome service launch_intent with one required field, intent_uri.
Keeping the service to one field avoids ESPHome exposing optional intent properties as
required fields in Home Assistant.
| Mode | Equivalent HA Companion command |
|---|---|
| Launch / activity URI |
command_activity (URI style) |
| Broadcast | command_broadcast_intent |
- Settings → Experimental → Android Intent Executor
- ADB Control (first card) — inbound ADB / local broadcasts that control Ava (mute, wake, start/stop service). Turn it off to ignore those broadcasts from ADB and other apps on the device.
- Android Intent Executor (second card) — outbound intents from Home Assistant
- Enable Show in Home Assistant on the second card to publish
launch_intent
After enabling the service or upgrading from an older multi-field version, restart the voice satellite or reload the ESPHome integration so Home Assistant refreshes the schema.
| Field | Purpose |
|---|---|
intent_uri |
Launch URI, Android intent URI, or broadcast:… URI |
-
intent_uristarts withbroadcast:→ broadcast - Otherwise → activity/URI launch
Broadcast properties are encoded in the one URI field:
| Property | URI source |
|---|---|
| action | Bare body, action query parameter, or Android intent action |
| package | Optional package query parameter or Android intent package |
| class | Optional class query parameter or Android intent component |
| extras | Optional extras query parameter or Android intent extras |
broadcast:ACTION sends an implicit broadcast. Add ?package=PACKAGE to target one
application. Query parameter values must be URL-encoded when they contain &, = or #.
HA Companion aliases (0.6.4): the long-form Home Assistant Companion query keys
intent_action, intent_package_name, intent_class_name, and intent_extras are also
accepted as aliases for action/package/class/extras inside the same intent_uri
query string — useful when copying examples straight from HA Companion docs. Values
embedded directly in the URI always win; the aliased keys only fill in whatever the URI
itself did not specify.
action: esphome.device_name_launch_intent
data:
intent_uri: "spotify://"# System settings
intent_uri: "intent:#Intent;action=android.settings.SETTINGS;end"action: esphome.device_name_launch_intent
data:
intent_uri: "broadcast:com.example.ava.ACTION_TOGGLE_MIC"The short form sends an implicit broadcast:
intent_uri: "broadcast:com.sendspinlite.ACTION_DUCK"Use the package form when the receiver requires an explicitly targeted broadcast:
intent_uri: "broadcast:com.sendspinlite.ACTION_DUCK?package=com.sendspinlite"intent_uri: "broadcast:com.urbandroid.sleep.alarmclock.START_SLEEP_TRACK?package=com.urbandroid.sleep"intent_uri: "broadcast:?action=com.urbandroid.sleep.alarmclock.ALARM_STATE_CHANGE&package=com.urbandroid.sleep&extras=alarm_label%3Awork%2Calarm_enabled%3Afalse"intent_uri: "broadcast:?action=com.example.ava.ACTION_SET_MOD_ENABLED&package=com.example.ava&extras=mod_id%3Aecho_dot_led%2Cmod_enabled%3Atrue"intent_uri: "broadcast:?action=com.example.ava.ACTION_APPLY_SETTINGS&package=com.example.ava&extras=setting_path%3Amicrophone.voicePrintEnabled%2Csetting_bool%3Atrue"The decoded extras query value uses name:value pairs separated by ,. Arrays use
; between values. Append :type for explicit types.
Guessing without type: digits → int, true/false → boolean, else string.
| Type | Example |
|---|---|
| Integer | EXTRA:101:int |
| Integer Array | EXTRA:101;102;103:int[] |
| ArrayList<Integer> | EXTRA:1;2;3:ArrayList<Integer> |
| Double | EXTRA:10.1:double |
| Double Array | EXTRA:10.1;10.2;10.3:double[] |
| Float | EXTRA:10.1:float |
| Float Array | EXTRA:10.1;10.2;10.3:float[] |
| Long | EXTRA:101:long |
| Long Array | EXTRA:101;102;103:long[] |
| Short | EXTRA:1:short |
| Short Array | EXTRA:1;2;3:short[] |
| Byte | EXTRA:127:byte |
| Byte Array | EXTRA:127;64:byte[] |
| Boolean | EXTRA:true:boolean |
| Boolean Array | EXTRA:true;true;false:boolean[] |
| Char | EXTRA:a:char |
| Char Array | EXTRA:a;b;c:char[] |
| String | EXTRA:abc:String |
| String (urlencoded) | EXTRA:%2C%3A%3B:String.urlencoded |
| String Array | EXTRA:a;b;c:String[] |
| String Array (urlencoded) | EXTRA:colon%3A;semicolon%3B:String[].urlencoded |
| ArrayList<String> | EXTRA:a;b;c:ArrayList<String> |
| ArrayList<String> (urlencoded) | EXTRA:colon%3A;comma%2C:ArrayList<String>.urlencoded |
Also accepted: :urlencoded and docs alias :ArrayList.urlencoded.
Open Spotify, then switch to the display settings page five seconds later:
automation:
- alias: "Morning Device Setup"
trigger:
- platform: time
at: "07:00:00"
action:
- service: esphome.ava_launch_intent
data:
intent_uri: "spotify://"
- delay: "00:00:05"
- service: esphome.ava_launch_intent
data:
intent_uri: "intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end"automation:
- alias: "Launch Netflix by Voice"
trigger:
- platform: conversation
command: "launch netflix"
action:
- service: esphome.ava_launch_intent
data:
intent_uri: "netflix://"These broadcasts need ADB Control on (first card). No UI opens — the device just reacts:
# Toggle microphone
intent_uri: "broadcast:com.example.ava.ACTION_TOGGLE_MIC"
# Restart the voice satellite
intent_uri: "broadcast:com.example.ava.ACTION_RESTART_VOICE_SATELLITE"
# Check for updates
intent_uri: "broadcast:com.example.ava.ACTION_CHECK_UPDATE"Full list of Ava control broadcasts: ADB Commands.
Trigger a Tasker task by name (extras are packed into the one URI):
intent_uri: "broadcast:net.dinglisch.android.tasker.ACTION_TASK?package=net.dinglisch.android.taskerm&extras=task_name%3ABedtime"Refresh a KWGT widget:
intent_uri: "broadcast:org.kustom.action.REFRESH_WIDGET?package=org.kustom.widget"automation:
- alias: "Weather-Appropriate Entertainment"
trigger:
- platform: state
entity_id: sensor.weather_condition
action:
- choose:
- conditions:
- condition: state
entity_id: sensor.weather_condition
state: "rainy"
sequence:
- service: esphome.ava_launch_intent
data:
intent_uri: "netflix://"
- conditions:
- condition: state
entity_id: sensor.weather_condition
state: "sunny"
sequence:
- service: esphome.ava_launch_intent
data:
intent_uri: "spotify://playlist/outdoor"Because broadcasts don't open a window, you can fire several in a row without anything jumping on screen:
automation:
- alias: "Movie Night on Ava Panel"
trigger:
- platform: state
entity_id: input_select.house_mode
to: "movie"
action:
- service: esphome.ava_launch_intent
data:
intent_uri: "intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end"
- service: esphome.ava_launch_intent
data:
intent_uri: "broadcast:com.spotify.music.playlist?package=com.spotify.music&extras=playlist%3Achill"
- service: esphome.ava_launch_intent
data:
intent_uri: "broadcast:com.example.ava.ACTION_RESTART_VOICE_SATELLITE"automation:
- alias: "Motion Snapshot from Front Door"
trigger:
- platform: state
entity_id: binary_sensor.front_door_motion
to: "on"
action:
- service: esphome.hallway_launch_intent
data:
intent_uri: "broadcast:com.example.ava.ACTION_SCREENSHOT?extras=path%3A%2Fsdcard%2FAva%2Fsnapshots%2Ffront_door.jpg"| Category | App | Intent URI |
|---|---|---|
| Entertainment | Spotify | spotify:// |
| Entertainment | Netflix | netflix:// |
| Entertainment | YouTube | youtube:// |
| Entertainment | Plex | plex:// |
| Communication | whatsapp:// |
|
| Communication | Telegram | tg:// |
| Communication | Discord | discord:// |
| System | WiFi settings | intent:#Intent;action=android.settings.WIFI_SETTINGS;end |
| System | Bluetooth settings | intent:#Intent;action=android.settings.BLUETOOTH_SETTINGS;end |
| System | Display settings | intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end |
| System | App info | intent:#Intent;action=android.settings.APPLICATION_DETAILS_SETTINGS;end |
- Check the app's own developer documentation
- Monitor
adb logcatwhile opening the app manually - Use a third-party inspector such as "Intent Interceptor"
- Search the Home Assistant community forums
- Trial and error: try
appname://orcom.package.name
- Tasker — Intent Launcher is the bridge between HA state and Tasker's device-level automation. Example: an HA automation fires a Tasker task via broadcast when the battery drops below 20%, while HA adjusts lighting to indicate charging.
- Automate — inject smart-home context into an Automate flow, or have Automate trigger an app launch through HA.
- Android Shortcuts — turn a static shortcut into a context-aware one, e.g. a "Movie Time" shortcut that opens Disney+ instead of Netflix when the kids are home.
sensor.your_device_name_intent_launcher_status
ESPHome’s service schema has no optional-argument flag. Ava now exposes only intent_uri
and parses all properties from it. If Home Assistant still shows the old fields, restart the
voice satellite or reload the ESPHome integration.
- Intent Launcher + Show in Home Assistant enabled
- After schema change, reconnect device / reload ESPHome integration
- Verify that HA shows only
intent_uri - Add
?package=PACKAGEif an implicit third-party broadcast is not received - URL-encode query values containing reserved characters
- Launch opens a UI (
startActivity) - Broadcast notifies a receiver (
sendBroadcast) — screen may not change
- Test each
intent_urimanually (e.g. via the HA Developer Tools service call) before wiring it into an automation - Add short
delay:steps between chained launches so the target app has time to come to the foreground - Prefer
broadcast:over launch when you don't want the screen to change - Add
?package=PACKAGEwhenever a third-party broadcast isn't received — many OEM ROMs block implicit broadcasts - Keep a personal list of working
intent_urivalues; app updates occasionally change their URI scheme
Back to Home
- Quick-Start
- System-Requirements
- Voice-Control
- Chorus-Wake
- ESPHome-Encryption
- HA-Direct-Connection
- Browser
- Screensaver
- Floating-Windows
- Home-Launcher
- Home-Screen-Widgets
- Notification-Scenes
- Quick-Entity
- Sensors
- Backup
- Sendspin
- Bluetooth
- Voice-Messages-Calls
- Music-Playback
- Camera
- Screen-Control
- Intent-Launcher
- ADB-Commands
- Mod-Store
- Ava-Fleet