2

我需要在我的应用程序中将媒体音量设置为MAX才能播放蜂鸣器。我试图通过使用media.setVolume()函数来做到这一点,但它似乎不起作用。

我已经试过了

mediaPlayer.setVolume(1.0f, 1.0f);

我也试过

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

以上都不适合我。

有人请帮助我如何使用MediaPlayer.setVolume(float, float)功能将媒体音量设置为满。

4

4 回答 4

4

MediaPlayer.setVolume(float, float)设置给定 MediaPlayer 实例的音量。默认情况下,此音量为1.0f(最大)。它不会改变我最初想要完成的全球媒体量。

我找到了一个简单地设置全局媒体音量的解决方案。

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

可以使用以下代码更改流类型(在本例中为音乐)的全局音量。

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

现在,将您的媒体对象作为 Music Stream 播放:

mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

确保您MODIFY_AUDIO_SETTINGS在应用程序的清单中请求权限。

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

注意:这只会将媒体(音乐)音量设置为最大。要设置像Ringer这样的其他卷,请使用STREAM_RING

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

于 2013-08-16T23:55:56.397 回答
2

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

于 2013-08-16T19:34:42.597 回答
1

请注意,传递的音量值是 0.0 到 1.0 范围内的原始标量

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

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

于 2013-08-16T19:33:00.240 回答
0

setVolume()不能正常工作,所以你应该通过 AudioManager 设置流音量。这个也有不好的影响,就是你改变了用户设备的整个流音量!用户不喜欢这样,所以你应该把它改回默认值。

但是怎么办?!

定义您的 AudioManager:

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()或之前为您设置音频属性prepareAsync()

mediaPlayer.setAudioAttributes(audioAttributes.build());

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

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                    am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, currentVolume, 0);
                }
            });

结束!你可以处理这个问题。:)

于 2019-12-15T20:04:40.983 回答