2012-04-14 6 views
0

나는 SMS를 통해 다른 모바일에 의해 제어 될 수있는 안드로이드 응용 프로그램에서 일하고 있습니다. 나는 PreferenceScreen을 레이아웃 (앱의 설정 부분)으로 사용하고 있습니다. onResume()이 호출되면 레이아웃이 업데이트됩니다.동적으로 업데이트 인터페이스

다른 모바일을 통해 명령 (SMS)이 전송되면 백그라운드에서 실행되는 서비스가 들어오는 SMS를 스누핑하고 SharedPreferences에 저장된 설정을 변경합니다. 이러한 변경 사항을 보려면 내 액티비티가 onResume의 코드를 실행해야합니다. 이전 활동으로 돌아가서 돌아 오면 변경 사항을 볼 수 있습니다.

서비스 실행으로 SharedPreferences가 변경되는 즉시 변경 사항을 표시하고 싶습니다. 내가 그것을하기 위해 무엇을해야합니까? 이 같은

답변

1

뭔가 : 빠른 응답

public class MyActivity extends Activity implements OnSharedPreferenceChangeListener 
{ 
    public static final String PREFS_NAME = "MyPrefsFile"; 

    @Override 
    protected void onCreate(Bundle state) 
    { 
     /* get shared preferences */ 
     SharedPreferences mySharedPreferences = getSharedPreferences(PREFS_NAME, 0); 

     /* register listener for changes to the values within the shared preferences */ 
     mySharedPreferences.registerOnSharedPreferenceChangeListener(this); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
    { 
     /* perform application processing */ 
     ... 

     /* update layout */ 
     View myView = findViewById(id.my_view); 

     /* invalidate the view causing it to be redrawn */ 
     myView.invalidate(); 
    } 
} 
+0

thanku. 이 코드는 mySharedPreferences와 연결된 객체가 변경되면 작동합니다. 내 서비스에서 나는 SharedPreferences의 새로운 인스턴스를 만들고있다. 따라서 서비스 내에서 변경이 이루어지면 현재 Activity에서 onCharedPreferenceChanged가 호출되지 않습니다! –

+0

여기를 확인하십시오 : [안드로이드 서비스가 활동과 통신하는 법] (http://stackoverflow.com/questions/2463175/how-to-have-android-service-communicate-with-activity) – flukey

+0

나는 당신의 코드를 가지고있다. 하지만 이것은 문제가되었습니다. http://stackoverflow.com/questions/10150480/registeronsharedpreferencechangelistener-not-working-for-changes-made-in-differe –

관련 문제