以编程方式自动静音Android手机的音量?

时间:2011-10-02 18:16:56

标签: android audio

我正在开发一个可以自动关闭Android手机声音的应用程序。如何检测声音的音量并以编程方式将其关闭?

    if (hour == myTime.getHour() && minute == myTime.getMinute()) {
        if (Settings.getSetMyTime(this))
            showNotificationAlarm(R.drawable.icon,
                    "It's time to work");
                    ///so, i want to add the silet function here..help me, please?
    }

提前致谢。

2 个答案:

答案 0 :(得分:5)

查看AudioManager,尤其是getStreamVolumesetStreamVolume方法

修改

您还可以使用Nikola Despotoski随setRingerMode

提供的方法

ServiceContext的孩子,因此您可以直接致电getSystemService

请参阅下面的更新代码(未经测试):

if (hour == myTime.getHour() && minute == myTime.getMinute()) {
        if (Settings.getSetMyTime(this))
            showNotificationAlarm(R.drawable.icon,"It's time to work");
            AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
            am.setRingerMode(AudioManager.RINGER_MODE_SILENT);

}

答案 1 :(得分:4)

注册AUDIO_SERVICE,然后使用AudioManager来控制音量增大/减小或设置个人资料。

或者,如果您想收听音频焦点中的更改,请进行活动implements AudioManager.OnAudioFocusChangeListener。覆盖未实现的方法。创建将负责更改类型的开关。

像:

@Override
    public void onAudioFocusChange(int focusChange) {
        switch(focusChange)
        {
        case AudioManager.AUDIOFOCUS_GAIN:
            //do something
            break;
        case AudioManager.AUDIOFOCUS_LOSS:
            break;
        }

或者,如果您想收听音频输出的更改,例如拔掉耳机(切换到手机扬声器),请使用ACTION_AUDIO_BECOMING_NOISY粘性广播

http://developer.android.com/reference/android/media/AudioManager.html#ACTION_AUDIO_BECOMING_NOISY

http://developer.android.com/reference/android/media/AudioManager.html#RINGER_MODE_SILENT

见这里

修改:这是解决方案。无需处理AudioFocus,只需设置不同的振铃配置文件或调整音量

if (hour == myTime.getHour() && minute == myTime.getMinute()) {
        if (Settings.getSetMyTime(this))
            showNotificationAlarm(R.drawable.icon,
                    "It's time to work");
                    AudioManager audiomanager =(AudioManager)YourActivityName.this.getSystemService(Context.AUDIO_SERVICE);
        audiomanager.setRingerMode(AudioManager.RINGER_MODE_SILENT); //or adjust volume here instead setting silent profile for the ringer
    }