如何在Android中获取/设置媒体音量(spotify)和TTS?

减少流量并同时增加TTS量

我有这个Android应用程序,每次都与TTS交谈并使用流媒体音乐(spotify)。 所以,我需要减少音量并增加TTS

我使用此代码,但这也减少了tts。

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,[int value],[if desired a flag]); 

任何减少像流音乐一样的方法。

在Java / android中。

你想做的是被称为’音频躲避’

这是一些示例代码:

  /** * Our {@link AudioManager.OnAudioFocusChangeListener} */ private static AudioManager.OnAudioFocusChangeListener audioFocus = new AudioManager.OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(final int focusChange) { if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager focusChange: " + focusChange); } switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_GAIN"); } break; case AudioManager.AUDIOFOCUS_LOSS: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS"); } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS_TRANSIENT"); } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK"); } break; default: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS default"); } break; } } }; /** * Duck the audio * * @param ctx the application context */ public static void duckAudioMedia(final Context ctx) { if (DEBUG) { MyLog.i(CLS_NAME, "duckAudioMedia"); } try { final AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE); switch (audioManager.requestAudioFocus(audioFocus, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)) { case AudioManager.AUDIOFOCUS_REQUEST_FAILED: if (DEBUG) { MyLog.w(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS_REQUEST_FAILED"); } break; case AudioManager.AUDIOFOCUS_REQUEST_GRANTED: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS_REQUEST_GRANTED"); } break; default: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS default"); } break; } } catch (final NullPointerException e) { if (DEBUG) { MyLog.w(CLS_NAME, "duckAudioMedia: NullPointerException"); e.printStackTrace(); } } catch (final Exception e) { if (DEBUG) { MyLog.w(CLS_NAME, "duckAudioMedia: Exception"); e.printStackTrace(); } } } /** * Notify the System that any previous condition requiring to duck or pause audio is now complete. * * @param ctx the application context */ public static void abandonAudioMedia(final Context ctx) { if (DEBUG) { MyLog.i(CLS_NAME, "abandonAudioMedia"); } try { final AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE); switch (audioManager.abandonAudioFocus(audioFocus)) { case AudioManager.AUDIOFOCUS_REQUEST_FAILED: if (DEBUG) { MyLog.w(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS_REQUEST_FAILED"); } break; case AudioManager.AUDIOFOCUS_REQUEST_GRANTED: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS_REQUEST_GRANTED"); } break; default: if (DEBUG) { MyLog.i(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS default"); } break; } } catch (final NullPointerException e) { if (DEBUG) { MyLog.w(CLS_NAME, "abandonAudioMedia: NullPointerException"); e.printStackTrace(); } } catch (final Exception e) { if (DEBUG) { MyLog.w(CLS_NAME, "abandonAudioMedia: Exception"); e.printStackTrace(); } } } 

您必须删除我的自定义日志记录。

当话语完成时,调用duckAudioMedia作为TTS启动并abandonAudioMedia