Я пытаюсь реализовать вход в Facebook для моего приложения для Android, но он работает ... хитрый: D
Мое приложение имеет многоязычные настройки (тексты, точки API ...).Таким образом, пользователь может выбрать язык приложения непосредственно в приложении, и все (ресурсы, предпочтения ...) будут меняться в зависимости от выбранных локалей.
НО, когда я нажимаю кнопку входа в Facebook, и появляется экран входа в систему ... мое приложениелокали немедленно меняются на мою систему. lang + en_US ... Поэтому, когда я изменяю настройки приложения на [sk_SK]
и нажимаю «Войти через Facebook», у меня появляется [cs_CZ,en_US]
.
. Я сделал пример приложения дляпродемонстрируйте мою проблему с настоящим фиктивным «наблюдателем» за изменением локалей ...
Я тестирую его на Pixel 2XL с Android 9.
public class FacebookLoginActivity extends AppCompatActivity {
private final String TAG = FacebookLoginActivity.this.getClass().getClass().getSimpleName();
private static final String EMAIL = "email";
CallbackManager callbackManager;
// DUMMY OBSERVER
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
String last = "";
@Override
public void run() {
if (getApplicationContext() == null) return;
Configuration configuration = getApplicationContext().getResources().getConfiguration();
String actual = "Locale: " + configuration.getLocales().toString();
if (!actual.equals(last)) {
last = actual;
Log.d(TAG, last);
}
handler.postDelayed(this, 50);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facebook_login);
// RUN MY DUMMY LISTENER
runnable.run();
// FORCE APP TO USE SK LANG
setLanguage(new Locale("sk", "SK"));
// INIT FB LOGIN CODE
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList(EMAIL));
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) { }
@Override
public void onCancel() { }
@Override
public void onError(FacebookException exception) { }
});
}
// THIS IS HOW I CHANGE LOCALES
private void setLanguage(Locale locale){
Configuration configuration = getApplicationContext().getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
getApplicationContext().createConfigurationContext(configuration);
} else {
configuration.locale = locale;
}
getApplicationContext().getResources().updateConfiguration(
configuration,
getApplicationContext().getResources().getDisplayMetrics()
);
}
}
У вас есть идеи?Почему это происходит?И как это исправить?
Спасибо за помощь:)