Android - 如何在显示 activity 时自动显示输​​入法选择器?

Android - How do I display input method picker automaticly whenever activity is shown?

TLDR 版本:我想在输入法之间使用尽可能少的点击次数。 InputMethodManager.showInputMethodPicker() 在 MainActivty onResume() 中调用时不执行任何操作,但在添加到按钮时起作用。我想这个问题是由于调用 showInputMethodPicker() 时我的应用程序尚未在前台引起的。

override fun onResume() {
    super.onResume()
    SettingChanger.inputMethodPicker(this)
}

fun inputMethodPicker(context: Context) {
    val imeManager: InputMethodManager = context.applicationContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()

    // current default input method (before change)
    val inputMethodNameBeforeChange = Settings.Secure.getString(
        context.contentResolver,
        Settings.Secure.DEFAULT_INPUT_METHOD
    )

    // Brings up the keyboard picker
    imeManager.showInputMethodPicker()

    if (inputMethodNameBeforeChange.contains("swiftkey")) {
        // Turn off bluetooth
        bluetoothAdapter.disable()
    } else {
        // Turn on bluetooth
        if (!bluetoothAdapter.isEnabled) {
            val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
            context.startActivity(enableBtIntent)
        }
    }
}

长版:

我在 Android phone 中使用匈牙利语物理键盘,但我首选的虚拟键盘没有注册所有字符;然而,不同的是,所以每当我通过蓝牙连接物理键盘时,我必须 s 到不同的虚拟键盘,并在完成后再次返回。

更改输入法的选项深深地隐藏在设置中,所以我写了一个应用程序,它只需打开输入法选择器,然后——为了让我的生活更轻松——根据它打开蓝牙 on/off我即将使用的方法。

我希望输入法选择器自动弹出,但是当我从另一个地方 到我的应用程序时,我的 inputMethodPicker(context: Context) 函数 - 我在 onCreate() 中调用- 不显示输入法选择器,但在适当的时候显示蓝牙开启请求。如果我用我的应用程序在屏幕上锁定 phone 并再次解锁,输入法选择器会按预期弹出。

我的 inputMethodPicker(context: Context) 函数在附加到按钮时按预期工作。

我的猜测是这个问题是由于调用 showInputMethodPicker() 时我的应用程序还没有在前台造成的。

(我尝试创建一个主菜单小部件, 很好地执行了我的 inputMethodPicker(context: Context),但该函数什么也没做,我猜可能也是因为某些 foreground/background 问题。)

每当显示 activity 时,如何显示输入法选择器和蓝牙开启请求? (或点击我的主菜单小部件按钮时)

我的古怪技巧似乎奏效了,它稍微延迟了函数调用:

override fun onResume() {
    super.onResume()
    Handler().postDelayed({ SettingChanger.inputMethodPicker(this) }, 50)
}