значение int не обновляется при изменении ContentObserver

я разрабатываю приложение для Android, где мой класс расширяет ContentObserver. Я регистрирую свой класс для наблюдения за изменениями в VOLUME_RING.

метод onchange моего класса вызывается только при изменении кнопки громкости.

Проблема в том, что глобальная переменная int, которая обновляется в конструкторе класса, не получает обновлений в методе onchange.

Код ниже - это то, что я пробовал,

   public class VolumeChecker extends ContentObserver 
    {
         Context context;
         Handler handler;

         int initialVolume;


public VolumeChecker(Context c, Handler handler)
{
    super(handler);
    context=c;
    this.handler = handler;

    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    initialVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

    Log.e("inisde","volvhevker - intitvol " + initialVolume);

}

@Override
public boolean deliverSelfNotifications()
{
    return super.deliverSelfNotifications();
}

@Override
public void onChange(boolean selfChange) 
{

    super.onChange(selfChange);

    Log.e("onchange","initialVolume" + initialVolume);
    refresh();
}


public void refresh()
{
    new VolumeChecker(context,handler);
}

}

Значение переменной initialVolume, которое обновляется в конструкторе при обновлении, не отражается в методе onchange.

Пожалуйста, помогите. Спасибо!


person Dave    schedule 03.07.2013    source источник


Ответы (1)


Какова цель создания нового VolumeChecker в refresh()? Вы можете просто снова обновить переменную следующим образом:

public void refresh() {
    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    initialVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
}

и, возможно, сделать рефакторинг, чтобы сделать аудио глобальной переменной, чтобы вам не приходилось каждый раз создавать ее заново. Вероятно, вы также можете преобразовать содержимое метода refresh() непосредственно в метод onChange().

person trevor-e    schedule 03.07.2013