2017-08-07 1 views
1

J'ai un récepteur de diffusion dans mon application qui est appelé lorsque les paramètres régionaux du périphérique change. Il y a un bug dans mon application sur quelques appareils, en particulier le Nexus 5x et le Galaxy S8 + (et très probablement d'autres) où Locale.getDefault() retourne la valeur périmée/précédente. Les chaînes localisées s'affichent correctement pour la nouvelle langue, mais dans l'application, nos paramètres régionaux sont obsolètes. Des idées?Locale.getDefault() est obsolète sur certains appareils Android

ex:

1) Device is in English -> App locale tells us we are in English.

2) Background the app and change the device language to German

3) App receives the locale changed broadcast event, Locale.getDefault() returns English instead of German

Je vois allemand être renvoyé ici pour de nombreux appareils, mais pas tous les appareils.

Répondre

2

Comme référencé dans another answer, les paramètres régionaux par défaut sont définis statiquement at the time the application is created. Essayez de récupérer les paramètres régionaux de vos ressources directement.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ 
    return getResources().getConfiguration().getLocales().get(0); 
} else{ 
    return getResources().getConfiguration().locale; 
} 
+0

Malheureusement, chacune de ces méthodes renvoie la même valeur périmée. –