0

我正在开发一个 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 方法中。

请帮助。谢谢!

4

1 回答 1

1

创建一个新VolumeChecker的内部的目的是什么refresh()?您可以像这样简单地再次更新变量:

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

并且也许进行一些重构以使音频成为全局变量,这样您就不必每次都重新创建它。您也可以将refresh()方法的内容直接重构到onChange()方法中。

于 2013-07-03T14:35:36.277 回答