PreferenceManager getDefaultSharedPreferences
est obsolète dans Android Q , comment le remplacer?
6 Réponses :
Citation de la documentation PreferenceManager
:
Cette classe est obsolète au niveau de l'API 29.
Utilisez la bibliothèque de préférences AndroidX pour un comportement cohérent sur tous les appareils. Pour plus d'informations sur l'utilisation de la bibliothèque de préférences AndroidX, voir Paramètres .
Qu'est-ce qui n'était pas cohérent dans l'original?
Oui, il est obsolète. Utilisez la bibliothèque de préférences AndroidX pour un comportement cohérent sur tous les appareils. Pour plus d'informations sur l'utilisation de la bibliothèque de préférences AndroidX, voir Paramètres.
Suivez ceci -
Vous pouvez utiliser la version de bibliothèque de support AndroidX de PreferenceManager
, c'est-à-dire androidx.preference.PreferenceManager
et non android.preference.PreferenceManager
.
n'oubliez pas d'ajouter ce qui suit à votre build.gradle.
implementation 'androidx.preference:preference:1.1.1'
Vous avez oublié d'ajouter la dépendance: implémentation "androidx.preference: préférence: 1.1.0"
@AbhinavSaxena Oui, bien sûr. C'est implicite lors de l'utilisation d'une bibliothèque de support. Une modification antérieure de cette réponse a ajouté la dépendance ktx uniquement kotlin; J'ai annulé cette modification car elle était réservée à Kotlin.
Cela semble devoir être la implementation
en implementation
non la dependency
?
Non pas que cela fonctionne non plus: Impossible de résoudre la dépendance pour ': app @ debugAndroidTest / compileClasspath': Impossible de trouver l'implémentation "androidx.preference: preference: 1.1.0.
Je suis curieux; Pourquoi ont-ils désapprouvé cette interface et une autre façon d'obtenir des préférences partagées était-elle préférée, ou le passage à androidx était-il l'intention?
@EdwardFalk Je ne sais pas mais pour moi ça sent que getDefaultSharedPreferences()
est un dommage collatéral. Oui, de nombreux domaines liés aux préférences ont été fragmentés, il est donc logique de les déplacer vers une bibliothèque de support. getDefaultSharedPreferences()
elle-même est toujours la même dans la plate-forme Android et les bibliothèques AndroidX, de sorte que cette fonction n'avait pas vraiment besoin de dépréciation.
Aussi pourquoi aucune mention de cela dans le guide de l'utilisateur des paramètres . La référence PreferenceManager dit obsolète et nous demande de voir comment créer des écrans de préférences.
Où dans le build.grandle j'ajoute cette ligne? Que se passe-t-il avec les anciens téléphones mobiles si je change «Android»? à "androidx."?
Lapreference
package fournit le PreferenceManager androidx
:
Java: implementation "androidx.preference:preference:1.1.1"
Kotlin: implementation "androidx.preference:preference-ktx:1.1.1"
par exemple, changez android.preference.PreferenceManager
en androidx.preference.PreferenceManager
Consultez également PreferenceFragmentCompat , qui est la classe PreferenceFragment
actuelle à utiliser.
Ajout d'un lien direct vers PreferenceFragmentCompat
, qui n'existait pas à l'époque ... c'est généralement le prochain problème de dépréciation auquel on peut faire face, en essayant de mettre à jour les préférences. L'autre réponse liée n'était valable que pour une durée limitée.
Pouvons-nous utiliser dans les API avant l'API 29?
Si vous ne faites que sauvegarder et récupérer des paires clé-valeur, vous pouvez remplacer:
getPackageName() + "_preferences"
avec:
prefs = getSharedPreferences( "my.app.packagename_preferences", Context.MODE_PRIVATE);
Assurez-vous d'utiliser le bon nom de fichier pour la nouvelle implémentation, sinon vos utilisateurs perdront l'accès à tout ce qui est enregistré avec getDefaultSharedPreferences (!). Ce qui suit obtiendra le nom de fichier utilisé par getDefaultSharedPreferences:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
bibliothèque kotlin
implementation 'androidx.preference:preference-ktx:1.1.1'
kotlin utilise Configuration.getInstance (). load (this, androidx.preference.PreferenceManager.getDefaultSharedPreferences (this))