Форум программистов, компьютерный форум CyberForum.ru

Листенер на кнопки громкости. Как правильно? - Android

Восстановить пароль Регистрация
 
MegaSinner
 Аватар для MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
22.02.2014, 17:37     Листенер на кнопки громкости. Как правильно? #1
Цель: определение и различие нажатий кнопок Громче/Тише, даже если увеличивать/уменьшать некуда и должно работать при свернутом приложении.
Начал вот с этого кода, но в нем сразу два бага:
1) при разовом нажатии кнопки громкости, событие срабатывает 4 раза, а при быстром двойном - шесть
2) если громкость увеличивать или уменьшать уже некуда, то нажатие не обрабатывается.

Java
1
2
SettingsContentObserver mSettingsContentObserver = new SettingsContentObserver(this,new Handler());
        getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver );
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    public class SettingsContentObserver extends ContentObserver {
        int previousVolume;
        Context context;
 
        public SettingsContentObserver(Context c, Handler handler) {
            super(handler);
            context=c;
 
            AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            previousVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
        }
 
        @Override
        public boolean deliverSelfNotifications() {
            return super.deliverSelfNotifications();
        }
 
 
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            Button btn = (Button)findViewById(R.id.button);
            AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
 
            int delta=previousVolume-currentVolume;
            cnter++;
            btn.setText(cnter+"");
            if(delta>0)
            {
                previousVolume=currentVolume;
            }
            else if(delta<0)
            {
                previousVolume=currentVolume;
            }
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2014, 17:37     Листенер на кнопки громкости. Как правильно?
Посмотрите здесь:

Android как правильно раставить кнопки в Table Row?
Android Как растянуть 3 кнопки по ширине layout?
Android Как прикрепить кнопки внизу?
Android Как получить уровень громкости звука?
Android Как правильно парсить?
Как изменить ссылку по нажатию кнопки? Android
Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто) Android
Android Как создать кнопку по нажатию кнопки?
Android Как заменить кнопки ? Бьюсь третьи сутки
Android studio определение громкости микрофона Android
Android Как получить уровень громкости на Android
Android Изменение громкости системы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru