Decoding voice effects for Android media apps in automobiles | via Danny Preussler | Jan, 2022


Danny Preussler

When running at the Android Auto integration for SoundCloud, I stumbled upon a captivating factor. Relating to imposing voice movements, stuff you learn within the documentation may range just a little from truth.

Voice instructions are very essential whilst riding a automotive. You wish to have the motive force to stay taking a look on the boulevard, stay his arms at the guidance wheel, as an alternative of interacting with any display. For this reason when development for Android Auto, Car OS, and Assistant Riding Mode you must fortify elementary voice searches.

For a track app like ours, the theory is understated. A person can say one thing like:

“Play Moderat on SoundCloud”

The Assistant will damage down our sentence for interpretation:

<Play> <Moderat> <on SoundCloud>

The verb (Play) and the app (SoundCloud) within the above command have been intended for the device. It is going to then get up the app discussed (if it declared auto fortify by way of manifest) and, as we requested for verb “Play”, the process MediaSessionCompat.Callback.onPlayFromSearch() will probably be known as with the rest question (“Moderat”) because the argument.

This question of “what to play” can nonetheless imply various things although. How are you aware if Moderat is a band or a tune? Don’t fear, the Assistant will lend a hand us additionally right here. It already were given some concept what our question may just imply, if we requested for an artist, an album, or a selected observe. However bear in mind, it behaves rather in a different way than formally documented.

In line with documentation we are meant to write code like this:

val mediaFocus = extras?.getString(MediaStore.EXTRA_MEDIA_FOCUS)
if (mediaFocus == MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) {
isArtistFocus = true
artist = extras.getString(MediaStore.EXTRA_MEDIA_ARTIST)

We’re assume to test for a package deal access with the important thing MediaStore.EXTRA_MEDIA_FOCUS . This will likely give us a touch on how best possible to interpret the question. The price of the consistent MediaStore.EXTRA_MEDIA_ARTIST checked above is vnd.android.cursor.merchandise/artist and there are equivalent constants associated with album title, tune identify. In idea all you must to is fit the mediaFocus towards a type of.

If truth be told, you’ll all the time get the worthvnd.android.cursor.merchandise/* . This doesn’t even exist as a continuing within the SDK however it’s precisely the worth you’ll be getting as the focal point param from Assistant for now. Even a Google seek is not going to deliver us very a long way right here, which is the principle reason why I’m penning this.

Why? This can be a query I will now not resolution. Perhaps it used to be running like this somewhen up to now. I opened an factor, that optimistically will put some gentle into this, be happy megastar and/or practice.

This doesn’t imply that we’re totally misplaced although.
Let’s take a look at a extra advanced question:

“Play Reside from Moderat on SoundCloud”

The device in fact provides us some hints about that question. Let’s test the entries of the Package deal we were given in or callbackonPlayFromSearch.
In fact, we can see, what we simply mentioned, the bizarre media focal point access:
android.intent.further.focal point -> vnd.android.cursor.merchandise/*

We even have get right of entry to to the natural and the extracted question:

android.intent.further.user_query -> Play reside from moderat on soundcloud

question -> reside moderat

However the attention-grabbing section is the next:

android.intent.further.artist -> Moderat
android.intent.further.identify
-> Reside

The Assistant discovered that one section is almost certainly a band and one a identify.
There are extra intent-extras like this that can be utilized to seek out the correct entity similar to android.intent.further.identify, android.intent.further.artist, android.intent.further.album and so on.
And those are in fact additionally mentioned within the documentation:

The next extras are supported in Android Car OS and Android Auto:
EXTRA_MEDIA_ALBUM
EXTRA_MEDIA_ARTIST
EXTRA_MEDIA_GENRE
EXTRA_MEDIA_PLAYLIST
EXTRA_MEDIA_TITLE

As end result simply forget about the code pattern a part of the documentation, forget about MediaStore.EXTRA_MEDIA_FOCUSand use the ones values as an alternative.

Simply seize all of them after which test which values are non null

val artist = extras.getString(MediaStore.EXTRA_MEDIA_ARTIST)
val album = extras.getString(MediaStore.EXTRA_MEDIA_ALBUM)
val identify = extras.getString(MediaStore.EXTRA_MEDIA_TITLE)

If the person requested for an album, you almost certainly could have a sound worth in album and artist, in a different way use artist and identify or just the identify

As mentioned, it’s unclear to me why the focal point isn’t forwarded to the apps as proven. Even, the Common Media Utility from Google makes use of the focal point parameter very similar to the documentation, which may imply this labored sooner or later.

After all have in mind, all the time remember to are in fact checking out all portions of your implementation! Code that used to be applied as mentioned within the documentation, may nonetheless now not in fact paintings.

https://issuetracker.google.com/problems/212779546



Supply hyperlink

Leave a Reply

Your email address will not be published.

Back To Top