【问题标题】:Android - Close IME settings activity after user has enabled input methodAndroid - 用户启用输入法后关闭 IME 设置活动
【发布时间】:2014-08-25 18:13:51
【问题描述】:

在用户启用特定的 IME(或者如果这是唯一的可能性,也可以是任何 ime)后,我如何关闭 IME 设置活动 (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);

但一旦选择/启用项目,它就无法返回调用活动。

谷歌键盘打开 IME 输入设置屏幕,一旦启用键盘(单击复选框),设置活动就会关闭,用户会返回到之前的向导活动。

【问题讨论】:

  • 不,我想到了一个方法,但还没有测试过。一旦启用了键盘,您就可以轻松检测到,因此一旦发生这种情况,您就可以将您的活动调回前面

标签: android input keyboard settings ime


【解决方案1】:

我也很难解决这个问题。直到我意识到我可以检查 AOSP 实现 here。具体来说,请查看SetupWizardActivity。在我看来,谷歌启动了一个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;
   }

【讨论】:

  • 不错,基本上是我建议的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2018-01-24
  • 2011-04-05
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多