webentwicklung-frage-antwort-db.com.de

Android erhält aktuelles Gebietsschema, nicht Standard

Wie erhalte ich das aktuelle Gebietsschema des Benutzers in Android?

Ich kann die Standardeinstellung erhalten, aber ist die aktuelle möglicherweise nicht korrekt?

Grundsätzlich möchte ich den Zwei-Buchstaben-Sprachcode aus dem aktuellen Gebietsschema. Nicht die Standardeinstellung. Es gibt keine Locale.current()

238
CQM

Die Standardvariable Locale wird zur Laufzeit statisch für Ihren Anwendungsprozess aus den Systemeinstellungen der Eigenschaften erstellt. Sie stellt daher die auf diesem Gerät ausgewählte Locale dar beim Start der Anwendung . Normalerweise ist dies in Ordnung, bedeutet jedoch, dass der Wert von getDefaultLocale() wahrscheinlich nicht sofort aktualisiert wird, wenn der Benutzer seine Locale in den Einstellungen ändert, nachdem der Anwendungsprozess ausgeführt wird.

Wenn Sie Ereignisse aus einem bestimmten Grund in Ihrer Anwendung abfangen müssen, versuchen Sie stattdessen, das Locale-Objekt vom Ressourcenobjekt Configuration abzurufen, d. H.

Locale current = getResources().getConfiguration().locale;

Möglicherweise stellen Sie fest, dass dieser Wert nach einer Änderung der Einstellungen schneller aktualisiert wird, wenn dies für Ihre Anwendung erforderlich ist.

435
Devunwired

Android N (API Level 24) Update (keine Warnungen):

   Locale getCurrentLocale(Context context){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return context.getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return context.getResources().getConfiguration().locale;
        }
    }
143
Makalele

Wenn Sie die Android Support Library verwenden, können Sie ConfigurationCompat anstelle der Methode von @ Makalele verwenden, um die Ablehnungswarnungen zu entfernen:

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);

oder in Kotlin:

val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
24
ElegyD

Aus der Dokumentation von getDefault :

Gibt das bevorzugte Gebietsschema des Benutzers zurück. Dies wurde möglicherweise mit setDefault (Locale) für diesen Prozess überschrieben.

Auch aus den Locale-Dokumenten:

Das Standardgebietsschema eignet sich für Aufgaben, bei denen dem Benutzer Daten angezeigt werden.

Anscheinend sollten Sie es einfach verwenden.

14
kabuko
 private Locale getLocale(Context context){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            return context.getResources().getConfiguration().getLocales().get(0);
        } else{
            //noinspection deprecation
            return context.getResources().getConfiguration().locale;
        }
    }
0
Vinayak