如何通过编程设置通知声音的音量?

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个回答

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();
}

当设备通知关闭时,声音仍在播放。是否有人使用上述代码遇到此问题?注意 - 我正在使用最新的GCM库。 - Ruby Verma

3
首先,我希望你意识到你试图依次播放两个通知,因此可能会发生冲突。 AudioManager.FLAG_PLAY_SOUNDr.play() 都会尝试播放声音。通常通过 UI 或以新的音量播放提示音来向用户提供一种信息就足够了。我建议您删除其中一个标志。如果您不需要任何标志,请将其设置为 0。
至于主要问题,我不确定您是否可以将音量级别设置为 0。尝试将其设置为 1,例如:
manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 1, AudioManager.FLAG_SHOW_UI);

如果您想要静音通知,请尝试使用setStreamMute,这与将音量设置为0相同。

1
你在清单文件中添加了 MODIFY_AUDIO_SETTINGS 权限吗? - Erol
1
没有变化,我在清单文件中添加了以下内容:<permission android:name="MODIFY_AUDIO_SETTINGS" > </permission> - Vitalii Korsakov
好的,请保留该权限,因为您将需要它。您能否前往手机的“设置/声音/音量”并查看您的通知音量是否与铃声音量相关联?如果是,请取消关联并重试。 - Erol
“ringer”是什么意思?我的主要铃声吗? - Vitalii Korsakov
通知和铃声音量具有不同的值。 - Vitalii Korsakov
显示剩余5条评论

0
在我的情况下,最终似乎这个方案可行。它可以使你的音频音量相对于流当前音量,但它对我的需求很有用。
MediaPlayer player = MediaPlayer.create(getApplicationContext(), notificationUri);
player.setVolume(toneLevel, toneLevel);

toneLevel的值在0.0到1.0之间,因此您甚至不需要查找流的范围。


-2
请编写以下函数,或复制并粘贴以下内容:
public void ringtone() {
    try {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
        r.play();
    } catch (Exception e) {}
}

当您想要进行蜂鸣通知时,请调用ringtone()


原始问题是关于音量的...他有一个几乎完全相同的代码片段,因此这与音量无关。 - Rock_Artist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接