android: перезапуск приложения вместо действий по смене языка

#java #android #locale

#java #Android #locale

Вопрос:

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

Комментарии:

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

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

Ответ №1:

Вы можете зарегистрировать a 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 мс (установите его на то, что вы хотите) позже.