2

私は自分のアプリに非常に単純な設定を実装しています。これは私の環境設定アクティビティです:

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 調査と一致するので、正しいと思います。

4

5 に答える 5

1

別のプロセスから共有設定にアクセスしようとしている場合 (それらが同じパッケージにある場合でも)、MODE_MULTIPROCESS を使用する必要があります。

次のコードを使用してください。

 SharedPreferences pref = getSharedPreferences("com.mypackage.myapp_preferences", MODE_MULTI_PROCESS);

重要なことは、MODE_MULTI_PROCESS と設定ファイルの名前を使用することです。

于 2012-11-09T15:50:42.220 に答える
0

addPreferencesFromResource()API 11 でメソッドが減価償却されたことが原因である可能性があります。

詳細はこちら

プリファレンスのコミット方法に問題がある可能性が高くなります。XML を投稿していただけますか?

于 2012-11-09T15:53:28.903 に答える
0

Android のバグのようです: https://code.google.com/p/android/issues/detail?id=66625

于 2014-03-12T18:16:19.620 に答える