PreferenceManager getDefaultSharedPreferences in Android Q veraltet

Antworten:

190

Sie können die AndroidX-Unterstützungsbibliotheksversion von verwenden PreferenceManager, dh androidx.preference.PreferenceManagerund nicht android.preference.PreferenceManager.

Denken Sie daran, Ihrem build.gradle Folgendes hinzuzufügen.

implementation 'androidx.preference:preference:1.1.1'
laalto
quelle
49
Sie haben vergessen, die Abhängigkeit hinzuzufügen: Implementierung "androidx.preference: Präferenz: 1.1.0"
Abhinav Saxena
1
@AbhinavSaxena Ja natürlich. Dies ist implizit bei Verwendung einer Support-Bibliothek. Eine frühere Bearbeitung dieser Antwort fügte die Nur-Kotlin-Ktx-Abhängigkeit hinzu. Ich habe diese Bearbeitung zurückgesetzt, weil sie nur für Kotlin bestimmt war.
Laalto
Das muss wohl implementationnicht sein dependency?
Richard Barraclough
Nicht, dass das auch nicht funktioniert: Abhängigkeit für ': app @ debugAndroidTest / compileClasspath' kann nicht aufgelöst werden: Implementierung konnte nicht gefunden werden "androidx.preference: Präferenz: 1.1.0.
Richard Barraclough
Ich bin neugierig; Warum haben sie diese Schnittstelle abgelehnt und wurde eine andere Möglichkeit, gemeinsame Einstellungen zu erhalten, bevorzugt, oder war der Wechsel zu AndroidX die Absicht?
Edward Falk
146

Das Paket preferenceenthält den androidx PreferenceManager :

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

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


dh wechseln android.preference.PreferenceManagerzuandroidx.preference.PreferenceManager


Siehe auch PreferenceFragmentCompat , die aktuell PreferenceFragmentzu verwendende Klasse.

Martin Zeitler
quelle
Es wurde ein direkter Link zu hinzugefügt PreferenceFragmentCompat, der damals noch nicht vorhanden war. In der Regel tritt dann als nächstes ein Verfallsproblem auf, wenn versucht wird, die Einstellungen zu aktualisieren. Die andere verknüpfte Antwort war nur für eine begrenzte Zeit gültig.
Martin Zeitler
Können wir in APIs vor API 29 verwenden?
H. Karatsanov
2

Zitat aus der PreferenceManager Dokumentation :

Diese Klasse wurde in API-Stufe 29 nicht mehr unterstützt.
Verwenden Sie die AndroidX- Einstellungsbibliothek für ein konsistentes Verhalten auf allen Geräten. Weitere Informationen zur Verwendung der AndroidX-Voreinstellungsbibliothek finden Sie unter Einstellungen .

Sergey Glotov
quelle
17
Was stimmte nicht mit dem Original überein?
Android-Entwickler
2

Wenn Sie nur Schlüssel-Wert-Paare speichern und abrufen, können Sie Folgendes ersetzen:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 

mit:

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

Stellen Sie sicher, dass Sie den richtigen Dateinamen für die neue Implementierung verwenden, da Ihre Benutzer sonst den Zugriff auf alle mit getDefaultSharedPreferences (!) Gespeicherten Daten verlieren. Im Folgenden wird der Dateiname abgerufen, den getDefaultSharedPreferences verwendet:

getPackageName() + "_preferences"
Androidcoder
quelle
1

Ja, es ist veraltet. Verwenden Sie die AndroidX-Einstellungsbibliothek für ein konsistentes Verhalten auf allen Geräten. Weitere Informationen zur Verwendung der AndroidX-Einstellungsbibliothek finden Sie unter Einstellungen.

Folge dies -

PreferenceManager

Anupam
quelle