Hi all,
As a hobby I'm building a personal voice assistant for my phone (Kotlin / Jetpack Compose), powered by the Claude API: calls, SMS, Gmail, calendar, Spotify & Sonos, Home Assistant (lights, alarm, TVs, energy usage…).
Code is public: github.com/NicoPi-dev/Assistant
Everything works well except the wake word, which bothers me.
**Current setup**
- A foreground service (microphone type) listening continuously with **Vosk**, offline, using a restricted grammar ("hey claude" + [unk]) and a confidence threshold.
- It works, but the mic is open 24/7: Android's green privacy dot stays on, it drains battery, and I'm not thrilled about it privacy-wise, even though everything stays local.
**What I'm after**
Something closer to "Hey Google" / Gemini: very low-power listening, ideally hardware (DSP) based, that only wakes the app on the hotword.
**Constraints**
- Free, no subscription or time-limited key
- Offline if possible
- No root (OnePlus 10T, OxygenOS 15 / Android 15, locked bootloader)
- Reliable: few false triggers (TV, conversations)
**Already looked at**
- **Picovoice Porcupine**: excellent, but the free tier is limited and needs an account key.
- **openWakeWord / microWakeWord**: promising, but unsure about battery impact running continuously on Android.
- **VoiceInteractionService / HotwordDetectionService**: the official DSP route, but it seems restricted to system/privileged apps (CAPTURE_AUDIO_HOTWORD).
- Setting my app as the **default assistant**: works for long-pressing the button, not for voice.
**Questions**
Can a third-party app set as default assistant access the hardware hotword on a non-rooted device? Has anyone pulled it off?
Otherwise, what's the most battery-friendly software approach you know: a tflite model like microWakeWord, VAD gating before Vosk, listening only when the screen is on or in the car…?
Tricks to limit listening automatically: while charging, when connected to Android Auto, at home on Wi-Fi…?
Any pointers or experience welcome. Thanks! 🙏