2016-07-26 4 views
0

J'essaie de créer un exemple d'application qui effectue une action uniquement sur un changement de paramètres régionaux. J'ai implémenté onConfigurationChanged (...) et j'aimerais rediriger un utilisateur vers une activité différente uniquement lors d'un changement de paramètres régionaux. L'activité qui écoute les modifications des paramètres régionaux est également à l'écoute des changements d'orientation (ce que j'ai fait dans le manifeste).Android - différencier les changements de configuration

Ma question est, est-il un moyen de différencier entre les deux changements de configuration?

L'activité est déclarée dans le manifeste comme ceci:

<activity android:name=".views.MainActivity" 
       android:configChanges="layoutDirection|locale|orientation|screenSize"/> 

Et la méthode onConfigurationChange (..) est comme ceci:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     // should execute only on locale change 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 

Répondre

2

Vous pouvez enregistrer vos paramètres régionaux dans votre SharedPreferences et comparer dans la méthode onConfigurationChanged si les paramètres régionaux ont été modifiés.

Utilisez comme ceci:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    SharedPreferences prefs = getSharedPreferences(
    "yourapp", Context.MODE_PRIVATE); 
    prefs.getString("locale", "DEFAULT"); 

    //newConfig.locale is deprecated since API lvl 24, you can also use newConfig.getLocales().get(0) 
    if(!locale.equalsIgnoreCase(newConfig.locale.toLanguageTag()) { 
     // should execute only on locale change 
     SharedPreferences settings = getSharedPreferences("yourapp", MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = settings.edit(); 
     prefEditor.putString("locale", newConfig.locale.toLanguageTag()); 
     prefEditor.commit(); 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 
} 
+0

Nice, vous pourriez éviter d'utiliser SharedPreferences en stockant une référence à l'environnement local précédent dans onCreate (la première fois les charges d'activité avant toute modification des paramètres régionaux se produisent), puis comparer les deux locales. – user1841702

+0

Bien sûr, cela le rend encore plus simple. Je n'ai pas pensé à ça, mais je suis content que je puisse aider :) – babadaba