2013-07-03 4 views
0

내 수업이 ContentObserver를 확장하는 Android 앱을 개발 중입니다. VOLUME_RING의 변경 사항을 관찰하기 위해 내 클래스 을 등록하고 있습니다.int 값이 ContentObserver의 onchange에서 업데이트되지 않습니다.

내 수업의 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를 방법에 반영하기되지 않습니다.

Please help.thanks! 제발 도와주세요!

답변

1

refresh() 내에 VolumeChecker을 새로 만드는 목적은 무엇입니까?

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

을 아마도 당신이 그것을 매번 다시 할 필요가 없도록 오디오 전역 변수를 만들기 위해 몇 가지 리팩토링을 수행 간단히과 같이 다시 변수를 업데이트 할 수 있습니다. 아마도 refresh() 메서드의 내용을 onChange() 메서드로 직접 리펙토링 할 수 있습니다.

+0

감사! 그것은 효과가 있었다. – Dave