2012-04-14 17 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の新しいインスタンスを作成しています。したがって、サービス内で変更が加えられた場合、現在のアクティビティの 'onSharedPreferenceChanged'は呼び出されません! –

+0

ここをクリック:[Androidサービスがアクティビティと通信する方法](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 –