I can change locale of my app using this code:
public static void setLocale(Locale locale)
{
Locale.setDefault(locale);
Configuration appConfig = new Configuration();
appConfig.locale = locale;
App.context().getResources().updateConfiguration
(appConfig,App.context().getResources().getDisplayMetrics());
}
but how to do it with any other app?
Done!!!
I'm sharing to other users my code! It takes name of current active app in English locale:
public static void setLocale(Locale locale, String packageName)
{
try
{
Context myAppContext = App.context();
Context otherAppContext = myAppContext.createPackageContext(packageName, myAppContext.CONTEXT_IGNORE_SECURITY);
Locale.setDefault(locale);
Configuration appConfig = new Configuration();
appConfig.locale = locale;
otherAppContext.getResources().updateConfiguration(appConfig, App.context().getResources().getDisplayMetrics());
}
catch(Throwable t){History.Error(t);}
}
public static String getActive()
{
try
{
PackageManager pm = App.context().getPackageManager();
ActivityManager am = (ActivityManager) App.context().getSystemService(App.context().ACTIVITY_SERVICE);
RunningTaskInfo taskInfo = am.getRunningTasks(1).get(0); // The first in the list of RunningTasks is always the foreground task.
String packageName = taskInfo.topActivity.getPackageName();
setLocale(new Locale("en-US"), packageName);
PackageInfo appInfo = pm.getPackageInfo(packageName, 0);
String label = appInfo.applicationInfo.loadLabel(pm).toString();
App.Toast(label);
return label;
}
catch (Throwable t){History.Error(t);}
return "???";
}