我需要在我的应用中将媒体音量设置为 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()
功能将媒体音量设置为完整。
答案 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.Builder
或AudioAttributes.Builder audioAttributes = new AudioAttributes.Builder();
audioAttributes.setLegacyStreamType(AudioManager.STREAM_NOTIFICATION);
之前,先为MediaPlayer
设置音频属性:
prepare()
最后为mediaPlayer设置一个完成时监听器,并将音量更改为其默认值:
prepareAsync()
完成!您可以解决问题。 :)