Android: перезапустить приложение вместо активности при смене языка

У меня есть несколько действий и несколько фрагментов, работающих в моем приложении. Всякий раз, когда я меняю локаль в настройках языка устройства, перезапускается только текущая активность. Есть ли способ перезапустить все приложение при изменении языка в настройках устройства?

"перезапускается только текущая активность" - вы в этом уверены? Изменения конфигурации должны перезапустить все действия

lelloman 09.04.2019 09:29

он перезапускает все действия, но остается в текущем действии, а не начинает снова с первого действия

Ravi Kumar 10.04.2019 04:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 829
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете зарегистрировать BroadcastReceiver для прослушивания намерения ACTION_LOCALE_CHANGED, а затем, получив намерение, вы можете выполнить свою логику перезапуска приложения. Так:

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //RESTART APPLICATION
    }
 };

//register broadcastreceiver
LocalBroadcastManager.getInstance(getContext())
    .registerReceiver(mBroadcastReceiver, new IntentFilter(Intent.ACTION_LOCALE_CHANGED));

//remember to unregister in onDestroy with LocalBroadcastManager.getInstance(mContext).unregisterReceiver(mBroadcastReceiver);

Чтобы «перезапустить» приложение, вы можете использовать:

Intent intent = new Intent(this, YourHomeActivity.class);
this.startActivity(intent);
this.finishAffinity();

, чтобы начать домашнее действие и очистить все остальные действия.

Или что-то вроде этого:

Intent mStartActivity = new Intent(MainActivity.this, MainActivity.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(MainActivity.this, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)MainActivity.this.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
System.exit(0);

чтобы на самом деле остановить приложение и перезапустить его через 100 мс (установите все, что хотите) позже.

Другие вопросы по теме