【问题标题】:Android AudioManager setStreamVolume Does NothingAndroid AudioManager setStreamVolume 什么都不做
【发布时间】:2021-12-23 11:57:36
【问题描述】:

我正在开发一个 APK,要求在一定时间后将设备音量重置为默认值,但是我使用的代码似乎没有做任何事情。目前我正在尝试通过使用AudioManager.setStreamVolume 方法来做到这一点,如下所示:

val audioStreamList = arrayOf(
    AudioManager.STREAM_MUSIC,
    AudioManager.STREAM_ALARM,
    AudioManager.STREAM_DTMF,
    AudioManager.STREAM_NOTIFICATION,
    AudioManager.STREAM_RING,
    AudioManager.STREAM_SYSTEM,
    AudioManager.STREAM_VOICE_CALL
)

fun setVolume() {
    for (stream in audioStreamList) {
        // Trying to set device volume to 50% by setting all stream volumes to 50%
        val volume = 0.5 * audioManager.getStreamMaxVolume(stream)

        audioManager.setStreamVolume(stream, volume, 0)
    }
}

我已将此添加到 AndroidManifest.xml:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

一些额外的细节:

  • 使用 Kotlin
  • 这是支持 Alexa 的设备
  • 执行上述代码后,Alexa认为音量为 5(这就是她所说的音量)。但是,实际设备音量仍为 Alexa 设置的最后一个音量。

有什么想法吗?

【问题讨论】:

    标签: java android kotlin audio alexa


    【解决方案1】:

    我有这些 Java 代码:

    在此代码中,不是将所有流音量设置为 50%,而是设置当前使用的流音量:

    audioManager.setStreamVolume((int)AudioManager.USE_DEFAULT_STREAM_TYPE, (int)Double.parseDouble(String.valueOf((long)(audioManager.getStreamMaxVolume((int)AudioManager.USE_DEFAULT_STREAM_TYPE) / 2))), 0);
    

    但如果你想设置所有的流音量,那么使用这个:

     audioManager.setStreamVolume((int) stream, (int)Double.parseDouble(String.valueOf((long)(audioManager.getStreamMaxVolume((int) stream) / 2))), 0);
    

    我还认为您应该将默认音量存储在一个变量中(在更改它之前),并在完成任何您想要的更改以重置音量后使用此音量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多