— For TV app developers

Make your TV app work with Speakremote Voice Input

Speakremote Voice Input is a speech engine for Android TV. When your app asks Android to listen, the viewer's phone listens and your app gets the words, as from any engine. There is no SDK: use Android's standard speech APIs, and show your mic whenever a speech engine is there.

Four checks, no SDK

• TVs, boxes and projectors sold without Google's services, whose remotes often have no mic.

• Google TVs and Android TVs whose owners removed or turned off Google's apps.

• People who'd rather speak to their phone than to the remote.

On these TVs, an app that only looks for Google's app hides its mic, though a speech engine is installed.

Who this reaches

— What to check

Use the speech engine the TV has

Each of these also helps every other speech engine a TV may have, not only ours.

2
Declare the queries (Android 11 and later)

Ask Android, not the package list. SpeechRecognizer.isRecognitionAvailable(context) is true when any speech engine is installed. Don't hide the mic because com.google.android.googlequicksearchbox or com.google.android.katniss is missing.

val canListen = SpeechRecognizer.isRecognitionAvailable(context)
micButton.isVisible = canListen

If you open the system voice prompt instead, check that something answers it:

val prompt = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
val hasPrompt = prompt.resolveActivity(packageManager) != null

1
Show the mic when an engine exists
3
Let Android pick the engine
4
Give the phone time

Apps targeting Android 11 (API 30) or later only see other apps they declare. Without these lines in the manifest, isRecognitionAvailable() is false and resolveActivity() null, whatever is installed.

<queries>
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
<intent>
<action android:name="android.speech.action.RECOGNIZE_SPEECH" />
</intent>
</queries>

Create the recognizer with SpeechRecognizer.createSpeechRecognizer(context), which uses the engine the TV is set to. Passing a ComponentName for Google's service, or using createOnDeviceSpeechRecognizer(), goes around the engine the viewer chose. Leanback's SearchSupportFragment already does the right thing.

Your app needs RECORD_AUDIO, granted at run time, as with any engine: Android checks it before the engine is called. Speakremote Voice Input itself never records on the TV.

The viewer may pick up the phone first. Speakremote Voice Input waits up to 30 seconds for the words, then sends one final result. So:

• Don't cancel() on a timer of your own. stopListening() is fine: the engine keeps waiting for the phone.

• Don't treat missing onRmsChanged levels or partial results as a failure; there are none.

• ERROR_NO_MATCH means nothing was said on the phone, ERROR_SPEECH_TIMEOUT that no words came within 30 seconds.

• The language is the one set on the phone; EXTRA_LANGUAGE isn't used.

— Common questions

Questions and answers

How do I try it?

No. Your app talks to Android's speech service and never to Speakremote. Nothing in your app names Speakremote, and the same code works with Google's engine and any other.

Do I need an SDK, a key or a partnership?
My app has its own voice search with its own speech service
Can my phone app talk to Speakremote Voice Input?

Install Speakremote Voice Input on an Android TV or a TV emulator and Speakremote on a phone on the same Wi-Fi, pair them (open Speakremote Voice Input on the TV, then add the TV in the phone app), keep Speakremote open on the phone, and press your app's mic. On a TV that has Google's engine as well, the screen of Speakremote Voice Input shows the ADB command that makes it the TV's voice input; set Google's back the same way afterwards.

Keep it where it works, and fall back to SpeechRecognizer when it's not available, rather than hiding the mic. On a TV without Google's services, Android's speech service may be the only one there.

Not at the moment: the connection between the phone and the TV app is private to Speakremote, and it only takes words from phones paired on the TV. If you'd like to use it, write to us.

Subtitles

Speakremote Voice Input also runs a Stremio subtitles add-on on the TV, at http://127.0.0.1:47532/manifest.json, for subtitles sent from the phone. An app that takes Stremio add-ons can use it like any other.

— Tell us

Your app works with it, or doesn't?

Tell us, and we'll look at it. Apps that work are named on the Speakremote page once we've tried them on a TV.

Email: support@dalipisdigital.tech

Please include

• Your app's name and package, and where to get it.

• How your app listens: SpeechRecognizer, the voice prompt, or Leanback's search.

• The TV or emulator and its Android version.

Speakremote is an independent app by Dalipis Digital. It is not made, endorsed or supported by Zidoo. Zidoo, Nuvio, Stremio, Trakt, IMDb and Letterboxd are trademarks of their owners and are named only to say what the app works with.

Dalipis Digital

Software engineering for secure, easy-to-use web and mobile apps. Makers of Speakremote.

Contact

© 2026. All rights reserved.