1. 程式人生 > >Android 切換系統語言後,重啟App

Android 切換系統語言後,重啟App

問題描述:App->改變系統語言->重進App後,最近的Activity會走onCreate()方法,然後App被殺掉;直到第二次進入App後,App會重啟
解決方案:App->改變系統語言->重進App後,最近的Activity走到onCreate()方法時,檢測系統語言是否改變,如果是,就重啟App。
LanguageUtil.class
package com.barry.common.util;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.text.TextUtils;

import java.util.Locale;

/**
 * 切換語言的工具類
 *
 * @author : barry.huang
 * @time : 16/9/21
 **/
public class LanguageUtil {

    private static final String LAST_LANGUAGE = "lastLanguage";

    /**
     * 當改變系統語言時,重啟App
     *
     * @param activity
     * @param homeActivityCls 主activity
     * @return
     */
    public static boolean isLanguageChanged(Activity activity, Class<?> homeActivityCls) {
        Locale locale = Locale.getDefault();
        if (locale == null) {
            return false;
        }
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(activity);
        String localeStr = sp.getString(LAST_LANGUAGE, "");
        String curLocaleStr = getLocaleString(locale);
        if (TextUtils.isEmpty(localeStr)) {
            sp.edit().putString(LAST_LANGUAGE, curLocaleStr).commit();
            return false;
        } else {
            if (localeStr.equals(curLocaleStr)) {
                return false;
            } else {
                sp.edit().putString(LAST_LANGUAGE, curLocaleStr).commit();
                restartApp(activity, homeActivityCls);
                return true;
            }
        }
    }

    private static String getLocaleString(Locale locale) {
        if (locale == null) {
            return "";
        } else {
            return locale.getCountry() + locale.getLanguage();
        }
    }

    public static void restartApp(Activity activity, Class<?> homeClass) {
        Intent intent = new Intent(activity, homeClass);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        activity.startActivity(intent);
        // 殺掉程序
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }

}
在基類BaseActivity的onCreate()方法裡呼叫LanguageUtil.isLanguageChanged(activity, homeActivityCls).
新增許可權
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
over.