Android - 在用户启用输入法后关闭 IME 设置 Activity

标签 android input keyboard settings ime

在用户启用了特定的 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/

相关文章:

c++ - 收到输入并测试它是否是 C++ 中的 int 后的无限循环

macos - 删除(转发)字符 iTerm2 OSX

Android 应用程序快捷方式不起作用。获取错误 "Failed to read the app data cannot start the app"

android - 这个标签和它的子标签可以被一个 <TextView/> 和一个复合绘图替换

html - 无法使用文字输入

javascript - 使用 JavaScript 检测用户存在

ios - Three20:TableViewController、Tab Bar 和 autoresizesForKeyboard 创建间隙

android - 如何更改回收站 View 中项目的位置

android - 如何检测android中某个渲染器区域内的触摸事件?

python - 从用户输入中选择第一个字母