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

问题描述

TLDR版本:我想在输入方法之间以尽可能少的点击进行切换。在MainActivty InputMethodManager.showInputMethodPicker()调用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手机上使用匈牙利语物理键盘,而我偏爱的虚拟键盘并未注册所有字符;但是,情况确实有所不同,因此,每当我通过蓝牙连接物理键盘时,都必须切换到其他虚拟键盘,完成后再返回。

更改输入法的选项深深地隐藏在设置中,因此我编写了一个应用程序,只需打开输入法选择器即可-为了让我的生活更轻松-根据我使用的方法打开/关闭蓝牙即将使用。

我希望输入法选择器自动弹出,但是当我从另一个地方切换到我的应用程序时,我在inputMethodPicker(context: Context)调用onCreate()函数没有显示输入法选择器,但在适当时显示Bluetooth-On请求。如果我在应用程序在屏幕上的情况下锁定了手机并再次解锁,则输入法选择器会按预期方式弹出。

我的inputMethodPicker(context: Context)函数在连接到按钮时可以正常工作。

我的猜测是问题是由调用showInputMethodPicker()时我的应用尚未出现引起的。

(我尝试创建一个菜单小部件,女巫执行了我的inputMethodPicker(context: Context)很好,但是该功能什么也没做,可能是因为我猜到了某些前景/背景问题。)

每当显示活动时,如何显示输入法选择器和Bluetooth-On请求? (或点击我的主菜单窗口小部件按钮时)

解决方法

我看来可行的怪异技巧使该函数的调用延迟了一点:

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