Новое приложение для клавиатуры не указано на странице настроек языка и ввода

Я загрузил и импортировал пример Softkeyboard из Android SDK (приложение) в студию Android и установил его на свой Sony xPeria Z3 под управлением Android 5.1.1. Тем не менее, я не вижу имя приложения на странице настроек языка и ввода .

Я проверил список установленных приложений на своем телефоне и вижу, что SoftKeyboard установлена, а в Android Studio ошибки нет.

Можете ли вы показать мне способ решить эту проблему?

Eray, см. это: developer.android.com/reference/android/provider/… Я могу вызвать этот конкретный метод ввода, разрешающий активность, используя adb shell am start -a android.settings.INPUT_METHOD_SETTINGSили adb shell "am start 'intent:#Intent;action=android.settings.INPUT_METHOD_SETTINGS;end'". Я считаю, что это может быть несложно преобразовать эту команду в код.

Ответы (1)

Примечание . Команды в этом решении требуют настройки на ПК, и решение протестировано на Android 4.2.1, 5.0.2 и 5.1.1.


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

Так как же это происходит? Мы знаем, что можем использовать командную строку, но это не то, что делают обычные пользователи.

Это происходит так. Когда вы запускаете это приложение, вас попросят включить его клавиатуру. Затем вы будете перенаправлены в подвид деятельности приложения «Настройки». В прошивках, близких к стандартному Android, пользователь может получить доступ к этому дополнительному действию, выбрав «Настройки» → «Язык и ввод» → «Текущая клавиатура» → «Выбрать клавиатуру» . Вот как это выглядит на некоторых устройствах:

(Нажмите на изображение, чтобы увеличить; изображение предоставлено OP)

ИЗОБРАЖЕНИЕ:

Вы можете использовать командную строку в качестве альтернативы, чтобы показать, что вспомогательное действие

adb shell am start -a android.settings.INPUT_METHOD_SETTINGS
adb shell "am start 'intent:#Intent;action=android.settings.INPUT_METHOD_SETTINGS;end'"  # alternative to above command

Для приложения, когда вы поворачиваете ползунок вправо в этом поддействии, его идентификатор IME добавляется к значению enabled_input_methods — безопасной настройке. Затем приложение отображается в разделе «Настройки» → «Язык и ввод » среди тех, которые уже включены в качестве методов ввода.

Поскольку только один IME может оставаться в качестве IME по умолчанию в системе, приложение затем отображает диалоговое окно для выбора приложения клавиатуры по умолчанию. Доступ к этому диалоговому окну можно получить из «Настройки» → «Язык и ввод» → «Текущая клавиатура» . Любая запись, которую вы выберете, станет клавиатурой по умолчанию в устройстве.

Теперь, когда вы знаете подробности, теперь вы можете легко добавить клавиатуру к включенным методам ввода, включая ваше примерное приложение клавиатуры.


Включение клавиатуры с помощью командной строки

Есть и другой способ. Все включенные методы ввода могут быть перечислены этой командой:

adb shell ime list -s

Пример вывода

com.android.inputmethod.latin/.LatinIME
net.zhdev.ctrlvkeyboard/.CtrlVKeyboard

Все доступные (включенные или нет) службы IME могут быть перечислены через

adb shell ime list -a

Пример вывода

com.android.inputmethod.latin/.LatinIME:
  mId= com.android.inputmethod.latin/.LatinIME mSettingsActivityName=com.android.inputmethod.latin.settings.SettingsActivity
  mIsDefaultResId = 0x7f070000
  Услуга:
    приоритет = 0, предпочтительный порядок = 0, совпадение = 0x108000, специфический индекс = -1, isDefault = false
    Информация о сервисе:
      имя = com.android.inputmethod.latin.LatinIME
      packageName=com.android.inputmethod.latin
      labelRes=0x7f08003a nonLocalizedLabel=нулевой значок=0x0 баннер=0x0
      enabled=true exported=true имя_процесса=com.android.inputmethod.latin
      разрешение = android.permission.BIND_INPUT_METHOD
      флаги = 0x0
net.zhdev.ctrlvkeyboard/.CtrlVKeyboard:
  mId= net.zhdev.ctrlvkeyboard/.CtrlVKeyboard mSettingsActivityName=null
  mIsDefaultResId = 0x0
  Услуга:
    приоритет = 0, предпочтительный порядок = 0, совпадение = 0x108000, специфический индекс = -1, isDefault = false
    Информация о сервисе:
      имя=net.zhdev.ctrlvkeyboard.CtrlVKeyboard
      packageName=net.zhdev.ctrlvkeyboard
      labelRes=0x7f0b0015 nonLocalizedLabel=нулевой значок=0x0 баннер=0x0
      enabled=true exported=true имя_процесса=net.zhdev.ctrlvkeyboard
      разрешение = android.permission.BIND_INPUT_METHOD
      флаги = 0x0
com.touchtype.swiftkey/com.touchtype.KeyboardService:
  mId= com.touchtype.swiftkey/com.touchtype.KeyboardService mSettingsActivityName=com.touchtype.settings.TouchTypeKeyboardSettings
  mIsDefaultResId = 0x0
  Услуга:
    приоритет = 0, предпочтительный порядок = 0, совпадение = 0x108000, специфический индекс = -1, isDefault = false
    Информация о сервисе:
      имя = com.touchtype.KeyboardService
      packageName=com.touchtype.swiftkey
      enabled=true exported=true имя_процесса=com.touchtype.swiftkey
      разрешение = android.permission.BIND_INPUT_METHOD
      флаги = 0x0

Выделенные рядом строки mId=— это идентификаторы клавиатурных приложений, доступных в моей системе.

В любом идентификаторе строка перед /является именем пакета приложения клавиатуры. Пример: для клавиатуры Swiftkey mId:

com.touchtype.swiftkey/com.touchtype.KeyboardService

Строка com.touchtype.swiftkeyпредставляет собой имя пакета приложения Swiftkey. Имя пакета — это то, что поможет вам найти соответствующий mID, который вы должны использовать для включения определенного приложения клавиатуры.

Чтобы узнать имя пакета приложения, выполните команду Просмотр полного имени пакета приложения?

Чтобы добавить или удалить IME в включенных методах ввода, выполните

# replace ID with mId of the keyboard app which you want to add or remove

adb shell ime enable ID   
adb shell ime disable ID  

Чтобы сделать IME IME по умолчанию для системы, выполните

# Note that it doesn't matter whether the IME is added into enabled input methods or not. Consider this a direct override.

adb shell settings put secure default_input_method "ID"
adb shell content update --uri content://settings/secure --bind value:s:"ID"  --where "name='default_input_method'"  # alternative to above command
Извините, я не программирую, поэтому не могу привести пример (программный способ) для запуска этого действия. Это все, что может помочь конечному пользователю.