【问题标题】:Android MediaPlayer volume is very low ( already adjusted Volume )Android MediaPlayer 音量非常低(已调整音量)
【发布时间】:2011-11-26 14:07:00
【问题描述】:

我正在使用 MediaPlayer 播放一种内部警报铃声。 我使用 setVolume(1.0f, 1.0f) 来最大化铃声播放时的音量。但铃声不能全音量播放(当我将它与单独播放铃声或通过内置的安卓闹钟进行比较时)

这是我的代码

mediaPlayer.setDataSource(context, ringtoneUri);
mediaPlayer.setLooping(looping);
mediaPlayer.setVolume(1.0f, 1.0f);
mediaPlayer.prepare();
mediaPlayer.start();

我添加了以下权限 android.permission.MODIFY_AUDIO_SETTINGS (不确定是否需要)

知道为什么 mediaPlayer 仍然不能最大限度地播放声音吗?

【问题讨论】:

    标签: java android media-player


    【解决方案1】:

    这是我找到的解决方案。

    AudioManager amanager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
    int maxVolume = amanager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
    amanager.setStreamVolume(AudioManager.STREAM_ALARM, maxVolume, 0);
    
    MediaPlayer mediaPlayer= new MediaPlayer();
    
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); // this is important.
    
    mediaPlayer.setDataSource(context, ringtoneUri);
    mediaPlayer.setLooping(looping);  
    mediaPlayer.prepare();
    mediaPlayer.start();
    

    【讨论】:

    【解决方案2】:

    我遇到了同样的问题,然后在MediaPlayer documentation 中注意到了这个:

    在Prepared状态下,可以通过调用相应的set方法来调整音频/音量、screenOnWhilePlaying、looping等属性。

    调用setVolume 之后 调用prepare 解决了这个问题,以便音频以最大音量播放。实际上,根据我刚刚引用的文档,您也应该在prepare 之后调用setLooping

    mediaPlayer.setDataSource(context, ringtoneUri);
    mediaPlayer.prepare();
    mediaPlayer.setLooping(looping);
    mediaPlayer.setVolume(1.0f, 1.0f);
    mediaPlayer.start();
    

    【讨论】:

      【解决方案3】:

      由于现在不推荐使用 setAudioStreamType(),您应该改用 setAudioAttributes() 方法。下面是完整的例子

      var mediaPlayer: MediaPlayer = MediaPlayer()
      fun playAudio(audioUrl: String) {
      
              mediaPlayer.apply {
                  if (isPlaying) {
                      stop()
                      reset()
                      release()
                  }
              }
      
              mediaPlayer = MediaPlayer()
              try {
      
                  mediaPlayer.apply {
                      setAudioAttributes(
                          AudioAttributes.Builder()
                              .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
                              .setUsage(AudioAttributes.USAGE_ALARM)
                              .build()
                      )
                      setVolume(2f,2f)
                      setDataSource(audioUrl)
                      prepare()
                      start()
                  }
              } catch (e: IOException) {
                  e.printStackTrace()
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多