如何以编程方式设置通知音量?

时间:2012-07-02 21:12:44

标签: android notifications android-audiomanager

我的主要活动中有这种方法

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方法中的卷号,通知始终使用相同的卷。那是为什么?

4 个答案:

答案 0 :(得分:8)

我走了另一条路。这不是我的问题的答案,而是恰当的答案。当我在STREAM_MUSIC中播放通知时,一切都很好。因此,通知将作为参数传递给函数

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_SOUNDr.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()