Android Q 中弃用了 PreferenceManager getDefaultSharedPreferences

PreferenceManager getDefaultSharedPreferences deprecated in Android Q

PreferenceManager getDefaultSharedPreferencesAndroid 10 中已弃用。我该如何更换它?

引自PreferenceManager documentation:

This class was deprecated in API level 29.
Use the AndroidX Preference Library for consistent behavior across all devices. For more information on using the AndroidX Preference Library see Settings.

是的,它已被弃用。使用 AndroidX 首选项库在所有设备上实现一致的行为。有关使用 AndroidX 首选项库的更多信息,请参阅设置。

关注这个-

PreferenceManager

您可以使用 PreferenceManager 的 Android 10 支持库版本,即 androidx.preference.PreferenceManager 而不是 android.preference.PreferenceManager

记得将以下内容添加到您的 build.gradle:

implementation 'androidx.preference:preference:1.1.1'

包裹preference provides the androidx PreferenceManager

Java: implementation "androidx.preference:preference:1.1.1"

科特林:implementation "androidx.preference:preference-ktx:1.1.1"


即 将 android.preference.PreferenceManager 更改为 androidx.preference.PreferenceManager


另请参阅 PreferenceFragmentCompat,这是当前要使用的 PreferenceFragment class。

如果您只是保存和检索键值对,您可以替换:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 

与:

 prefs = getSharedPreferences(
            "my.app.packagename_preferences", Context.MODE_PRIVATE);

确保为新的实现使用正确的文件名,否则您的用户将无法访问使用 getDefaultSharedPreferences(!) 保存的所有内容。下面将获取文件名getDefaultSharedPreferences使用:

getPackageName() + "_preferences"

Kotlin 库

implementation 'androidx.preference:preference-ktx:1.1.1'

Kotlin 使用

Configuration.getInstance().load(this, androidx.preference.PreferenceManager.getDefaultSharedPreferences(this))

您可以在应用级别导入此库gradle

implementation "androidx.preference:preference-ktx:1.1.1"

然后从 class 中创建“PreferenceManager”的地方删除导入的文件 按 Alt+Enter 并导入 androidx 希望您获得最新版本的首选项管理器。

implementation "androidx.preference:preference-ktx:1.1.1"

class 文件 PrivateSharedPreferences;

class PrivateSharedPreferences(context: Context) {
private val file = "com.example.com_shared"
private val key = "private_key"
private var sharedPreferences = context.getSharedPreferences(file, Context.MODE_PRIVATE)
private val editor = sharedPreferences.edit()

fun save(ok: Boolean) {
    editor.putBoolean(key, ok)
    editor.apply()
}

fun read() : Boolean {
    return sharedPreferences.getBoolean(key, false)
}

}

从片段或适配器读取;

PrivateSharedPreferences(context).read()

保存

PrivateSharedPreferences(context).save(true)

使用Jetpack DataStore,它是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。 DataStore 使用 Kotlin 协程和 Flow 异步、一致地存储数据, 和交易。

If you're currently using SharedPreferences to store data, consider migrating to DataStore instead.

设置

dependencies {
        implementation "androidx.datastore:datastore:1.0.0"
}

它还支持 RxJava2 和 RxJava3。