У меня есть несколько действий и несколько фрагментов, работающих в моем приложении. Всякий раз, когда я меняю локаль в настройках языка устройства, перезапускается только текущая активность. Есть ли способ перезапустить все приложение при изменении языка в настройках устройства?
он перезапускает все действия, но остается в текущем действии, а не начинает снова с первого действия
Вы можете зарегистрировать 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 мс (установите все, что хотите) позже.
"перезапускается только текущая активность" - вы в этом уверены? Изменения конфигурации должны перезапустить все действия