Android — Как мне автоматически отображать средство выбора метода ввода при отображении активности?

#android #kotlin #android-input-method #background-foreground

#Android #kotlin #android-input-method #фон-передний план

Вопрос:

Версия 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, и моя предпочтительная виртуальная клавиатура не регистрирует все свои символы; однако это делает другая, поэтому всякий раз, когда я подключаю физическую клавиатуру через Bluetooth, мне приходится переключаться на другую виртуальную клавиатуру и обратно, когда я закончу.

Возможность изменения метода ввода глубоко скрыта в настройках, поэтому я написал приложение, которое просто открывает средство выбора метода ввода и — чтобы немного облегчить мне жизнь — включает / выключает Bluetooth в зависимости от того, какой метод я собираюсь использовать.

Я хочу, чтобы средство выбора метода ввода отображалось автоматически, но когда я переключаюсь на свое приложение из другого места, моя inputMethodPicker(context: Context) функция, которую я вызываю onCreate() , не показывает средство выбора метода ввода, но показывает Bluetooth-По запросу, когда это уместно. Если я заблокирую телефон с моим приложением на экране и снова разблокирую, средство выбора метода ввода появится, как и ожидалось.

Моя inputMethodPicker(context: Context) функция работает должным образом при подключении к кнопке.

Я предполагаю, что проблема вызвана тем, что мое приложение еще не находится на переднем плане при showInputMethodPicker() вызове.

(Я попытался создать виджет главного меню, ведьма выполнила мой inputMethodPicker(context: Context) просто отлично, но функция ничего не сделала, вероятно, также из-за какой-то проблемы с передним планом / фоном, я думаю.)

Что я могу сделать, чтобы показывать средство выбора метода ввода и Bluetooth-по запросу всякий раз, когда отображается активность? (или при нажатии кнопки виджета моего главного меню)

Ответ №1:

Мой странный взлом, который, кажется, работает, немного задерживает вызов функции:

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