Succeded!!!
The only way I have figured out of changing the current IME is by customizing it.
For my resp. problem I have to change the keyboard to chinese if I change the system language to chinese from my custom Settings application.
The approach discussed below was used for a custom LatinIME app.
Every IME has a class that extends InputMethodService class. In this class we can override a method called onInitializeInterface. This method gets called everytime when the configuration changes i.e. when you change your system Locale it will be called.
Here we can check whether the Locale that's currently been selected is supported by the current IME or not. If not then we can load its respective IME by calling the method switchInputMethod(id).
To get the id, we can query through inputMethodManager and get a list of available ids
String pinyinId = "";
InputMethodManager inputMethodManager = (InputMethodManager) getApplicationContext()
.getSystemService(INPUT_METHOD_SERVICE);
List<InputMethodInfo> inputMethodInfos = inputMethodManager.getInputMethodList();
for (InputMethodInfo inputMethodInfo : inputMethodInfos) {
if (inputMethodInfo.getId().contains("pinyin")) {
pinyinId = inputMethodInfo.getId();
}
}
After getting the id we can call switchInputMethod(pinyinId) and it will change the IME.