media.setVolume()函数似乎不起作用

时间:2013-08-16 19:22:20

标签: android

我需要在我的应用中将媒体音量设置为 MAX 以播放蜂鸣器。 我试图通过使用media.setVolume()函数来实现它,但它似乎不起作用。

我已经尝试了

 mp.setVolume(1.0f, 1.0f);

&安培;

  int MAX_VOLUME = 1000;
 final float volume = (float) (1 - (Math.log(MAX_VOLUME - 999) / Math.log(MAX_VOLUME)));
 mp.setVolume(volume, volume);

以上都不适合我。

有人请教我如何使用setVolume()功能将媒体音量设置为完整

4 个答案:

答案 0 :(得分:2)

请确保您已将MODIFY_AUDIO_SETTINGS设置为您在应用中请求的权限,如果这是您要设置的卷类型。

答案 1 :(得分:2)

最后,我找到了一个简单的解决方案,我只想在这里添加它,以便其他人可能得不到帮助。

有用的备注:我在stackoverflow.com上找到了很多答案,用于设置最大音量更改音量,其中大多数使用报警流(STREAM_ALARM)这样做。我认为如果你随便播放音频,使用闹钟流不是一个好的选择。

不使用media.setVolume(float, float)函数,最好使用AudioManager进行此项工作。以下代码将音乐音量设置为最大值。级别:

  AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);

现在,将您的媒体对象作为音乐流播放:

    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

确保您已将MODIFY_AUDIO_SETTINGS设置为您在应用中请求的权限。 如果您没有此权限,请将此代码添加到您的Manifest:

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

注意:这仅将媒体音量设置为最大值。水平。要设置其他音量,例如 Ringer ,请使用 STREAM_RING

感谢@MrTristan的建议,这真的很有帮助。

答案 2 :(得分:1)

  

请注意,传递的卷值是范围为0.0到1.0

的原始标量

http://developer.android.com/reference/android/media/MediaPlayer.html#setVolume(float,浮动)

为什么不尝试使用mp.setVolume(1.0, 1.0)

答案 3 :(得分:0)

[<User(Username ='zeke')>]无法正常工作,因此您应该通过AudioManager设置流音量。 这也有不好的效果,因为您更改了用户设备的整个流音量! 而且用户不喜欢这样,因此您应该将其更改回默认值。

但是如何?!

定义您的AudioManager:

<div class="bars">
  <input type="checkbox" id="menuToggle" />
  <div class="menu-icon">
    <span class="bar-1"></span>
    <span class="bar-2"></span>
    <span class="bar-3"></span>
  </div>
</div>

.menu-icon .bar-1,
  .menu-icon .bar-2,
  .menu-icon .bar-3 {
    display: block;
    background: #000;
    height: 4px;
    margin: 4px 0;
    width: 30px;
    transition: 0.5s ease;
  }

  #menuToggle:checked ~ .menu-icon .bar-1 {
    transform: rotate(-45deg) translate(-8px, 3px);
    -webkit-transform: rotate(-45deg) translate(-8px, 3px);
  }
  #menuToggle:checked ~ .menu-icon .bar-2 {
    opacity: 0;
  }
  #menuToggle:checked ~ .menu-icon .bar-3 {
    transform: rotate(45deg) translate(-8px, -3px);
    -webkit-transform: rotate(45deg) translate(-8px, -3px);
  }
  #menuToggle:checked ~ .menu-icon {
    visibility: visible;
  }

存储当前音量并将流值设置为其最大值:

setVolume()

定义AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 并为其设置流类型:

int currentVolume = Objects.requireNonNull(am).getStreamVolume(AudioManager.STREAM_NOTIFICATION);
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, am.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0);

在调用AudioAttributes.BuilderAudioAttributes.Builder audioAttributes = new AudioAttributes.Builder(); audioAttributes.setLegacyStreamType(AudioManager.STREAM_NOTIFICATION); 之前,先为MediaPlayer设置音频属性:

prepare()

最后为mediaPlayer设置一个完成时监听器,并将音量更改为其默认值:

prepareAsync()

完成!您可以解决问题。 :)