Android - закрыть действие настроек IME после того, как пользователь включил метод ввода
Как я могу закрыть действие настроек IME (ACTION_INPUT_METHOD_SETTINGS) после того, как пользователь включил определенный IME (или, возможно, просто любой момент, если это единственная возможность), как это делает клавиатура 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);
Но он не может вернуться к активности вызова после выбора / включения элемента.
Клавиатура Google открывает экран настроек ввода IME, и как только клавиатура включена (флажок установлен), действие настроек закрывается, и пользователь возвращается к предыдущему действию мастера.
1 ответ
Мне было трудно решить эту проблему. Пока я не понял, что могу просто проверить реализацию AOSP здесь. В частности, проверьте 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;
}