如何根据铃声音量设置android MediaPlayer音量?

如何根据铃声音量设置android MediaPlayer音量?,android,android-mediaplayer,ringtone,Android,Android Mediaplayer,Ringtone,如何根据铃声音量设置MediaPlayer的音量 我采用了这种方法,但不起作用: MediaPlayer player = MediaPlayer.create(MyActivity.this, R.raw.sound); AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int currentVolume = audio.getStreamVo

如何根据铃声音量设置MediaPlayer的音量

我采用了这种方法,但不起作用:

        MediaPlayer player = MediaPlayer.create(MyActivity.this, R.raw.sound);
        AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int currentVolume = audio.getStreamVolume(AudioManager.RINGER_MODE_NORMAL);

        player.setVolume(currentVolume, currentVolume);
试试看:

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

您应该使用设置要播放音频的音频流,而不是调整音量-这将自动使用所选音频流的音量。例如,如果您想让音频以与通知相同的音量播放,可以使用:


尝试在AudioManager.STREAM\u通知或AudioManager.STREAM\u环上播放时未产生任何声音。我必须通过AudioManager.STREAM\u音乐。利用Ssuuk at的思想,我编写了以下代码:

AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
int volume_level1= am.getStreamVolume(AudioManager.STREAM_RING);
int maxVolume=am.getStreamMaxVolume(AudioManager.STREAM_RING);
final MediaPlayer mp1 = MediaPlayer.create(context, R.raw.notification_delivery);
mp1.setAudioStreamType(AudioManager.STREAM_MUSIC);
float log1=(float)(1-Math.log(maxVolume-volume_level1)/Math.log(maxVolume));
mp1.setVolume(log1,log1);

您可以尝试以下方法:

 AudioAttributes audioAttributes = new AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
            .setLegacyStreamType(AudioManager.STREAM_RING)
            .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build();
    int s = audioManager.generateAudioSessionId();
    mediaPlayer = MediaPlayer.create(context, R.raw.default_ring,audioAttributes,s);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();

您可以在
setLegacyStreamType()
中传递所需的流类型。如果您喜欢以上内容,您的媒体播放器voulme将遵循流类型音量,该音量在音频属性中传递给
setLegacyStreamType()
方法。

您实际想做什么?最初,我想使用NotificationManager,它将显示通知和声音,但仅当应用程序关闭时才显示。当应用程序处于活动状态时,我只想使用声音,因此,我尝试使用与铃声音量相同的MediaPlayer。这正是我需要做的。我只需要添加一个方法,如答案:,它就可以工作了。谢谢。这似乎不会导致任何错误,但我不再听到任何声音(即使我的通知量大大增加),并且查看文档,它说此方法在API级别21中被弃用。。。
 AudioAttributes audioAttributes = new AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
            .setLegacyStreamType(AudioManager.STREAM_RING)
            .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build();
    int s = audioManager.generateAudioSessionId();
    mediaPlayer = MediaPlayer.create(context, R.raw.default_ring,audioAttributes,s);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();