#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)
}