Voice Instruction in HERE Maps is not working
<p>I want to implement the Voice Instructions by HERE Maps on Android, I used the Sample Code "LiveSightGuidanceActivity" and I added the Code related to the Voice instruction from <a href="https://developer.here.com/mobile-sdks/documentation/android-hybrid-plus/topics/map-voice-instructions.html" rel="nofollow">here</a> 
But the Voice is not working! and I got the error </p>

<blockquote>
  <p>E/MediaPlayer: Should have subtitle controller already set</p>
</blockquote>

<p>here's a piece of code from the sample </p>

<pre><code>  // Setup navigation manager
        m_navigationManager = NavigationManager.getInstance();
        m_navigationManager.setMap(m_map);
        m_navigationManager.setMapUpdateMode(MapUpdateMode.NONE); // No need to update map as LiveSight already does so
        attachNavigationListeners();

        stopNavigationManager();



        // Disable navigation sounds
        m_audioFlags = m_navigationManager.getEnabledAudioEvents();
        m_navigationManager.setEnabledAudioEvents(EnumSet.allOf((NavigationManager.AudioEvent.class))); // it was nonOf

        // Disable traffic avoidance mode as we use pedestrian guidance
        m_navigationManager.setTrafficAvoidanceMode(TrafficAvoidanceMode.DISABLE);


        // Start navigation in Simulation Mode
        NavigationManager.Error error = m_navigationManager.simulate(m_liveSightMapRoute.getRoute(), SIMULATION_SPEED);

        if (error != NavigationManager.Error.NONE) {
            Toast.makeText(getApplicationContext(), "Failed to start navigation. Error: " + error, Toast.LENGTH_LONG).show();
            m_navigationManager.setMap(null);
            return;
        }



        m_navigationManager.setNaturalGuidanceMode(EnumSet.of(NavigationManager.NaturalGuidanceMode.JUNCTION));
        setupVoice();
</code></pre>

<p>And here's the full setupVoice() method</p>

<pre><code> private void setupVoice() {

        // declare the listeners
// add application specific logic in each of the callbacks.

      instructListener = new NavigationManager.NewInstructionEventListener() {

            @Override
            public void onNewInstructionEvent() {
                // Interpret and present the Maneuver object as it contains
                // turn by turn navigation instructions for the user.
                m_navigationManager.getNextManeuver();
            }
        };

        positionListener = new NavigationManager.PositionListener() {

            @Override
            public void onPositionUpdated(GeoPosition loc) {
                // the position we get in this callback can be used
                // to reposition the map and change orientation.
                loc.getCoordinate();
                loc.getHeading();
                loc.getSpeed();

                // also remaining time and distance can be
                // fetched from navigation manager
                m_navigationManager.getTimeToArrival(true,
                        Route.TrafficPenaltyMode.DISABLED);
                m_navigationManager.getDestinationDistance();
            }
        };

        // start listening to navigation events
        m_navigationManager.addNewInstructionEventListener(
                new WeakReference&lt;NavigationManager.NewInstructionEventListener&gt;(instructListener));

        // start listening to position events
        m_navigationManager.addPositionListener(
                new WeakReference&lt;NavigationManager.PositionListener&gt;(positionListener));

        // Retrieve the VoiceCatalog and download the latest updates
        VoiceCatalog voiceCatalog = VoiceCatalog.getInstance();

        if (!voiceCatalog.isLocalCatalogAvailable()) {
            Log.d(TAG, "Voice catalog is not available in local storage.");
            //Toast.makeText(mActivity.getApplicationContext(), "Voice catalog is not available in local storage.", Toast.LENGTH_LONG).show();

            voiceCatalog.downloadCatalog(new VoiceCatalog.OnDownloadDoneListener() {
                @Override
                public void onDownloadDone(VoiceCatalog.Error error) {
                    if (error == VoiceCatalog.Error.NONE) {
                        // catalog download successful
                        Log.d(TAG, "Download voice catalog successfully.");

                        //Toast.makeText(mActivity.getApplicationContext(), "Voice catalog download successful.", Toast.LENGTH_LONG).show();
                    } else {
                        Log.d(TAG, "Download voice catalog failed.");

                        //Toast.makeText(mActivity.getApplicationContext(), "Voice catalog download error.", Toast.LENGTH_LONG).show();
                    }

                    // Get the list of voice packages from the voice catalog list
                    List&lt;VoicePackage&gt; voicePackages =
                            VoiceCatalog.getInstance().getCatalogList();
                    if (voicePackages.size() == 0) {
                        Log.d(TAG, "Voice catalog size is 0.");

                        //Toast.makeText(mActivity.getApplicationContext(), "Voice catalog size is 0.", Toast.LENGTH_LONG).show();
                    }

                    long id = -1;
                    // select
                    for (VoicePackage voicePackage : voicePackages) {
                        if (voicePackage.getMarcCode().compareToIgnoreCase("eng") == 0) {
                            if (voicePackage.isTts()) // TODO: need to figure out why always return false
                            {
                                id = voicePackage.getId();
                                break;
                            }
                        }
                    }

                    if (!VoiceCatalog.getInstance().isLocalVoiceSkin(id)) {
                        final long finalId = id;
                        VoiceCatalog.getInstance().downloadVoice(id, new VoiceCatalog.OnDownloadDoneListener() {
                            @Override
                            public void onDownloadDone(VoiceCatalog.Error error) {
                                if (error == VoiceCatalog.Error.NONE) {
                                    //voice skin download successful
                                    Log.d(TAG, "Download voice skin successfully.");

                                    //Toast.makeText(mActivity.getApplicationContext(), "Voice skin download successful.", Toast.LENGTH_LONG).show();

                                    // set the voice skin for use by navigation manager
                                    if (VoiceCatalog.getInstance().getLocalVoiceSkin(finalId) != null) {
                                        m_navigationManager.setVoiceSkin(VoiceCatalog.getInstance().getLocalVoiceSkin(finalId));
                                    } else {
                                        Log.d(TAG, "Get local voice skin error.");

                                        //Toast.makeText(mActivity.getApplicationContext(), "Navi manager set voice skin error.", Toast.LENGTH_LONG).show();
                                    }

                                } else {
                                    Log.d(TAG, "Download voice skin failed.");
                                    //Toast.makeText(mActivity.getApplicationContext(), "Voice skin download error.", Toast.LENGTH_LONG).show();
                                }

                            }
                        });
                    } else {
                        // set the voice skin for use by navigation manager
                        if (VoiceCatalog.getInstance().getLocalVoiceSkin(id) != null) {
                            m_navigationManager.setVoiceSkin(VoiceCatalog.getInstance().getLocalVoiceSkin(id));
                        } else {
                            Log.d(TAG, "Get local voice skin error.");
                            //Toast.makeText(mActivity.getApplicationContext(), "Navi manager set voice skin error.", Toast.LENGTH_LONG).show();
                        }
                    }
                }
            });
        }
    }
</code></pre>