以编程方式禁用Android中的所有声音和振动

时间:2014-05-11 06:13:36

标签: java android audio

我想禁用Android设备上的所有声音和振动。根据类似问题的答案,我目前正在使用以下代码来静音所有音频流,将铃声模式设置为静音,并假冒语音呼叫场景:

AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
    //DOESNT DISABLE ALARM CLOCK
    amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
    amanager.setStreamMute(AudioManager.STREAM_ALARM, true);
    amanager.setStreamMute(AudioManager.STREAM_RING, true);
    amanager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
    amanager.setStreamMute(AudioManager.STREAM_DTMF, true);
    amanager.setStreamMute(AudioManager.STREAM_MUSIC, true);
    amanager.setStreamMute(AudioManager.STREAM_VOICE_CALL, true);
    //disables vibrate and sound of ringer
    amanager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    //fakes voice call...changes alarm to single tone+vibrate
    amanager.setMode(AudioManager.MODE_IN_CALL);
    amanager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

这适用于禁用音乐和来电,但是,如评论中所述,Android的内置闹钟应用程序仍能产生声音和振动。

有谁知道如何真正禁用所有声音和振动?或者通过绕过音频流冒险猜测为什么闹钟应用程序似乎?

1 个答案:

答案 0 :(得分:0)

setStreamMute对我来说无法使闹钟静音,但使用setStreamVolume STREAM_ALARM 设置音量为零。之后必须恢复警报音量。

例如:

AudioManager manager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);    
manager.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);