私は自分のアプリに非常に単純な設定を実装しています。これは私の環境設定アクティビティです:
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
設定を読み取るすべてのアクティビティまたはサービスは、次のことを行います。
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
現在、設定の 1 つは、アプリが接続するサーバーです。これは、ユーザーがアプリを離れてもオンラインのままであるため、バインドされていないサービスとして実装されています。サービスが開始されると (onStartCommand)、ソケット情報が設定から読み取られます。
問題: 設定を変更してサービスを再起動しても、古い値のままです。
理解できません!助けてください :)
まだ機能していないので、もう少し詳しく説明します。私の間違いはどこかにあると思います...
私のサービスは次のようになります。
public class XMPPService2 extends Service {
SharedPreferences preferences;
public void onCreate() { ... }
public int onStartCommand(Intent intent, int flags, int startId) {
preferences = getSharedPreferences("com.company.appname_preferences.xml", MODE_MULTI_PROCESS);
Log.d(TAG, preferences.getString("server", "DEFAULT")); // this always prints the default value
}
public void onDestroy() { ... }
}
私が理解している限り、それについて私がしなければならないことはあまりありません。私もしようとしました
getPreferenceManager().setSharedPreferencesMode(MODE_MULTI_PROCESS);
前
addPreferencesFromResource(R.xml.preferences);
しかし、これは役に立ちませんでした。
現在、これらのメソッドは非推奨であることがわかっています。ただし、アプリがタブレットと 2.3 デバイスで動作することを確認する必要があります。
私はまだAndroidに慣れていないので、基本的な概念を誤解しているかもしれません。私が得た答えは私の Web 調査と一致するので、正しいと思います。