在用户启用了特定的 IME(或者可能只是任何 IME,如果这是唯一的可能性)之后,我如何关闭 IME 设置 Activity (ACTION_INPUT_METHOD_SETTINGS),就像 Google 键盘一样。
我都试过了:
Intent enableIntent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS);
//enableIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivityForResult(enableIntent, 0);
和:
Intent enableIntent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS);
enableIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(enableIntent);
但是一旦选择/启用了某个项目,它就无法返回调用 Activity 。
Google 键盘会打开 IME 输入设置屏幕,一旦启用键盘(单击复选框),设置 Activity 就会关闭,用户会返回到之前的向导 Activity 。
最佳答案
我也很难尝试解决这个问题。直到我意识到我可以检查 AOSP 实现 here .具体来说,检查 SetupWizardActivity .在我看来,Google 启动了一个 Handler
来轮询状态。具体来说,尝试遵循 SettingsPoolingHandler#handleMessage
具体来说:
step1.setAction(new Runnable() {
@Override
public void run() {
invokeLanguageAndInputSettings();
handler.startPollingImeSettings();
}
});
public void startPollingImeSettings() {
sendMessageDelayed(obtainMessage(MSG_POLLING_IME_SETTINGS),
IME_SETTINGS_POLLING_INTERVAL);
}
@Override
public void handleMessage(final Message msg) {
final SetupWizardActivity setupWizardActivity = getOwnerInstance();
if (setupWizardActivity == null) {
return;
}
switch (msg.what) {
case MSG_POLLING_IME_SETTINGS:
if (UncachedInputMethodManagerUtils.isThisImeEnabled(setupWizardActivity,
mImmInHandler)) {
setupWizardActivity.invokeSetupWizardOfThisIme();
return;
}
startPollingImeSettings();
break;
}
}
void invokeSetupWizardOfThisIme() {
final Intent intent = new Intent();
intent.setClass(this, SetupWizardActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
| Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
mNeedsToAdjustStepNumberToSystemState = true;
}
关于Android - 在用户启用输入法后关闭 IME 设置 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573730/