Voice Downloading ¶
Setup ¶
Download the
VoiceDownloading
project
archive file or clone the project with Git
See the Configure Android Example guide.
Run the example ¶
In Android Studio, from the
File
menu, select
Sync
Project
with
Gradle
Files
|
|
|
How it works ¶

You can open the MainActivity.kt file to see how the list of navigation instruction voices is obtained from the server, displayed, and how a voice is downloaded.
1SdkSettings.onConnectionStatusUpdated = { connected ->
2 if (connected && !voicesCatalogRequested)
3 {
4 voicesCatalogRequested = true
5
6 val loadVoicesCatalog = {
7 SdkCall.execute {
8 // Defines an action that should be done after the network is connected.
9 // Call to the content store to asynchronously retrieve the list of voices.
10 contentStore.asyncGetStoreContentList(EContentType.HumanVoice, progressListener)
11 }
12 }
MainActivity
overrides the
onCreate
function, which sends an
asynchronous request to the server, once a connection is available,
to load the list of available voices. In the request to get the voices
from the server, a
progressListener
is also passed in:
contentStore.asyncGetStoreContentList(EContentType.HumanVoice,
progressListener)
1private val progressListener = ProgressListener.create(
2 onStarted = {
3 progressBar?.visibility = View.VISIBLE
4 showStatusMessage("Started content store service.")
5 },
6 onCompleted = { errorCode, _ ->
7 progressBar?.visibility = View.GONE
8 showStatusMessage("Content store service completed with error code: $errorCode")
9 when (errorCode)
10 {
11 GemError.NoError ->
12 {
13 // No error encountered, we can handle the results.
14 SdkCall.execute {
15
16 // Get the list of voices that was retrieved in the content store.
17 val models = contentStore.getStoreContentList(EContentType.HumanVoice)?.first
18
19 if (!models.isNullOrEmpty())
20 {
21 // The voice items list is not empty or null.
22 val voiceItem = models[0]
23 val itemName = voiceItem.name
24 // Start downloading the first voice item.
25 SdkCall.execute {
26 voiceItem.asyncDownload(GemSdk.EDataSavePolicy.UseDefault,
27 true,
28 onStarted = {
29 showStatusMessage("Started downloading $itemName.")
30 },
31 onCompleted = { _, _ ->
32 listView?.adapter?.notifyItemChanged(0)
33 showStatusMessage("$itemName was downloaded.")
34 },
35 onProgress = {
36 listView?.adapter?.notifyItemChanged(0)
37 })
38 }
39 }
40 displayList(models)
41 }
42 }
43 GemError.Cancel ->
44 {
45 // The action was cancelled.
46 }
47 else ->
48 {
49 // There was a problem at retrieving the content store items.
50 showDialog("Content store service error: ${GemError.getMessage(errorCode)}")
51 }
52 }
53 },
54 postOnMain = true
55)
MainActivity
a
progressListener
is created to wait for the online
content store service to start.
The
onCompleted
block in the progress listener waits for the content
store service to be ready.
onCreate
function,
the progress listener gets the list of voices
from the downloaded (local) copy of the list:
val
models
=
contentStore.getStoreContentList(EContentType.HumanVoice)?.first
models
, is not empty,
then the data (sound) for the first voice in the list,
at index 0, is downloaded automatically:
val
voiceItem
=
models[0]
voiceItem.asyncDownload()
1private fun displayList(models: ArrayList<ContentStoreItem>?)
2{
3 if (models != null)
4 {
5 val adapter = CustomAdapter(models)
6 listView?.adapter = adapter
7 }
8}
CustomAdapter
to display a scrollable
list of country names, flags and voice names with the
displayList()
function.