gpt4 book ai didi

android - 默认共享首选项给我错误的服务值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:21 24 4
gpt4 key购买 nike

我有一个 PreferenceFragment,我在其中用 XML 定义了一个 CheckBoxPreference。我需要在服务中检查这个值,但它总是给我旧值。当我重新启动应用程序时,我注意到该值已正确更改。

我的偏好 fragment :

public class OptionsFragment extends PreferenceFragment 
{

public static final String WIFI_ONLY = "wifi";

private SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MyApplication.getInstance());

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.config);
}

}

我的配置文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<CheckBoxPreference
android:defaultValue="true"
android:key="wifi"
android:summary="Check if you want to use wifi only"
android:title="Use Wifi only" />

</PreferenceScreen>

我的服务:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MyApplication.getInstance());        
Log.d(TAG, "isWifiOnly : "+settings.getBoolean(OptionsFragment.WIFI_ONLY, true));

无论我是否更改,日志总是返回相同的值,除非我重新启动应用程序。另外,在我的 MainActivity 中,我在 OnCreate() 中有那一行:

PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.config, false);

如果需要,它会使用默认值创建配置文件。

我做错了什么,问题是什么?

最佳答案

感谢此链接 Managing SharedPreferences in both PreferenceActivity and Service within same app,我找到了解决方案感谢 Andrew T.:

问题是多进程模式。如果您有一个在 list 中使用 android:process=""声明的服务(这是我的情况),那么有必要设置多进程模式。

这是我做的:

在 PreferenceFragment 中:

public static final String CONFIG_NAME = "pref";

...

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);


getPreferenceManager().setSharedPreferencesName(CONFIG_NAME);
getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);

addPreferencesFromResource(R.xml.config);

...
}

我的服务:

SharedPreferences settings = MyApplication.getInstance().getSharedPreferences(OptionsFragment.CONFIG_NAME, Context.MODE_MULTI_PROCESS);

然后我以这种方式在 MainActivity 中设置默认值:

PreferenceManager.setDefaultValues(getApplicationContext(), OptionsFragment.CONFIG_NAME, Context.MODE_MULTI_PROCESS, R.xml.config, false);

现在它工作正常。希望对您有所帮助!

再次感谢 Andrew T。

关于android - 默认共享首选项给我错误的服务值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23674571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com