安卓 - 在用户启用输入法后关闭输入法设置界面

4

如何在用户启用特定的输入法(或者如果这是唯一可能性,可能只是任意输入法)后,关闭IME设置活动(ACTION_INPUT_METHOD_SETTINGS),就像谷歌键盘一样。

我尝试过以下两种方法:

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输入设置屏幕,并且一旦启用键盘(复选框被选中),设置活动就会关闭并将用户返回到之前的向导活动。


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

3
我也曾经费尽心思地想要解决这个问题,直到我意识到我可以在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;
   }

很好,这基本上就是我建议的。 - behelit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接