ActivityLanguages.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package com.example.multilanguages;
  2. import android.app.Activity;
  3. import android.app.Application;
  4. import android.os.Bundle;
  5. /**
  6. * author : Android 轮子哥
  7. * github : https://github.com/getActivity/MultiLanguages
  8. * time : 2021/01/21
  9. * desc : Activity 语种注入
  10. */
  11. final class ActivityLanguages implements Application.ActivityLifecycleCallbacks {
  12. /*
  13. 这里解释一下,为什么要在 Activity 所有生命周期中刷新语种
  14. 这是因为发现有的手机厂商系统(例如 miui 系统)会偷摸修改 Activity 或 Application 绑定的语种
  15. Github 地址:https://github.com/getActivity/MultiLanguages/issues/52
  16. */
  17. static void inject(Application application) {
  18. application.registerActivityLifecycleCallbacks(new ActivityLanguages());
  19. }
  20. @Override
  21. public void onActivityPreCreated(Activity activity, Bundle savedInstanceState) {
  22. refreshActivityAndApplicationLanguage(activity);
  23. }
  24. @Override
  25. public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
  26. refreshActivityAndApplicationLanguage(activity);
  27. }
  28. @Override
  29. public void onActivityPostCreated(Activity activity, Bundle savedInstanceState) {
  30. refreshActivityAndApplicationLanguage(activity);
  31. }
  32. @Override
  33. public void onActivityPreStarted(Activity activity) {
  34. refreshActivityAndApplicationLanguage(activity);
  35. }
  36. @Override
  37. public void onActivityStarted(Activity activity) {
  38. refreshActivityAndApplicationLanguage(activity);
  39. }
  40. @Override
  41. public void onActivityPostStarted(Activity activity) {
  42. refreshActivityAndApplicationLanguage(activity);
  43. }
  44. @Override
  45. public void onActivityPreResumed(Activity activity) {
  46. refreshActivityAndApplicationLanguage(activity);
  47. }
  48. @Override
  49. public void onActivityResumed(Activity activity) {
  50. refreshActivityAndApplicationLanguage(activity);
  51. }
  52. @Override
  53. public void onActivityPostResumed(Activity activity) {
  54. refreshActivityAndApplicationLanguage(activity);
  55. }
  56. @Override
  57. public void onActivityPrePaused(Activity activity) {
  58. refreshActivityAndApplicationLanguage(activity);
  59. }
  60. @Override
  61. public void onActivityPaused(Activity activity) {
  62. refreshActivityAndApplicationLanguage(activity);
  63. }
  64. @Override
  65. public void onActivityPostPaused(Activity activity) {
  66. refreshActivityAndApplicationLanguage(activity);
  67. }
  68. @Override
  69. public void onActivityPreStopped(Activity activity) {
  70. refreshActivityAndApplicationLanguage(activity);
  71. }
  72. @Override
  73. public void onActivityStopped(Activity activity) {
  74. refreshActivityAndApplicationLanguage(activity);
  75. }
  76. @Override
  77. public void onActivityPostStopped(Activity activity) {
  78. refreshActivityAndApplicationLanguage(activity);
  79. }
  80. @Override
  81. public void onActivityPreSaveInstanceState(Activity activity, Bundle outState) {
  82. refreshActivityAndApplicationLanguage(activity);
  83. }
  84. @Override
  85. public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
  86. refreshActivityAndApplicationLanguage(activity);
  87. }
  88. @Override
  89. public void onActivityPostSaveInstanceState(Activity activity, Bundle outState) {
  90. refreshActivityAndApplicationLanguage(activity);
  91. }
  92. @Override
  93. public void onActivityPreDestroyed(Activity activity) {
  94. refreshActivityAndApplicationLanguage(activity);
  95. }
  96. @Override
  97. public void onActivityDestroyed(Activity activity) {
  98. refreshApplicationLanguage(activity.getApplication());
  99. }
  100. @Override
  101. public void onActivityPostDestroyed(Activity activity) {
  102. refreshApplicationLanguage(activity.getApplication());
  103. }
  104. /**
  105. * 刷新 Activity 和 Application 的语种
  106. */
  107. private void refreshActivityAndApplicationLanguage(Activity activity) {
  108. if (activity == null) {
  109. return;
  110. }
  111. MultiLanguages.updateAppLanguage(activity);
  112. refreshApplicationLanguage(activity.getApplication());
  113. }
  114. /**
  115. * 刷新 Application 的语种
  116. */
  117. private void refreshApplicationLanguage(Application application) {
  118. if (application == null) {
  119. return;
  120. }
  121. MultiLanguages.updateAppLanguage(application);
  122. }
  123. }