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;
   }
Другие вопросы по тегам