5

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

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

4 回答 4

9

我走了另一条路。这不是我的问题的完全答案,而是适当的答案。当我在 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();
}
于 2012-07-04T18:42:35.850 回答
3

首先,我希望您意识到您正在尝试一个接一个地播放两个通知,因此可能存在冲突。AudioManager.FLAG_PLAY_SOUND并且r.play()都会尝试播放声音。通常,通过 UI 或通过播放新音量的哔声为用户提供一种类型的信息就足够了。我建议您删除其中一个标志。如果你不需要,就给它0。

来到主要问题,我不确定您是否可以将音量级别设置为 0。尝试将 1 设置为

manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 1, AudioManager.FLAG_SHOW_UI);

如果要静音,可以尝试使用setStreamMute,相当于将音量设置为 0。

于 2012-07-02T23:01:10.423 回答
0

就我而言,最终这似乎奏效了。它会使您的音频音量相对于流当前音量,但它对我的需要很有用。

MediaPlayer player = MediaPlayer.create(getApplicationContext(), notificationUri);
player.setVolume(toneLevel, toneLevel);

toneLevel 介于 0.0 - 1.0 之间,因此您甚至不需要找到流的范围..

于 2018-12-28T16:02:03.450 回答
-2

编写如下函数,或复制并粘贴以下内容,

public void ringtone() {
    try {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
        r.play();
    } catch (Exception e) {}
}

ringtone()在您想要发出哔声通知时拨打电话。

于 2013-07-26T05:08:53.697 回答