我的主要活动中有这种方法
private void beep()
{
AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0,
AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
Uri notification = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(),
notification);
r.play();
}
据我所知,通知音量应由STREAM_NOTIFICATION调节。但是,尽管setStreamVolume方法中的卷号,通知始终使用相同的卷。那是为什么?
答案 0 :(得分:8)
private void beep(int volume)
{
AudioManager manager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
manager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
Uri notification = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer player = MediaPlayer.create(getApplicationContext(), notification);
player.start();
}
答案 1 :(得分:2)
首先,我希望您意识到您正在尝试相互播放两个通知,因此可能存在冲突。 AudioManager.FLAG_PLAY_SOUND
和r.play()
都会尝试播放声音。通常可以通过UI或通过播放新音量的蜂鸣声为用户提供一种类型的信息。我建议你删除其中一个标志。如果你不需要,只需给它0。
回到主要问题,我不确定你是否可以将音量设置为0.尝试输入1,如
manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 1, AudioManager.FLAG_SHOW_UI);
如果您要将通知静音,请尝试使用setStreamMute,这相当于将音量设置为0.
答案 2 :(得分:0)
对于我而言,这最终似乎是可行的。 它将使您的音频音量相对于流的当前音量,但这对我的需求很有用。
MediaPlayer player = MediaPlayer.create(getApplicationContext(), notificationUri);
player.setVolume(toneLevel, toneLevel);
toneLevel在0.0-1.0之间,因此您甚至不需要查找流的范围。
答案 3 :(得分:-2)
编写如下函数,或复制并粘贴以下内容,
public void ringtone() {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {}
}
并在您要发出提示音通知时拨打ringtone()
。