Автоматически отключать звук на Android Phone программно? - PullRequest
1 голос
/ 02 октября 2011

Я разрабатываю приложение, которое может автоматически отключать звук телефона 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 ]

5 голосов
/ 02 октября 2011

Посмотрите на AudioManager , особенно getStreamVolume и setStreamVolume методы

EDIT

Вы также можете использовать метод Nikola Despotoski, поставляемый с setRingerMode

A Service, является потомком Context, поэтому вы можете позвонить напрямую 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);

}
4 голосов
/ 02 октября 2011

Зарегистрируйтесь для 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 sticky broadcast

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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...