2012-06-14 5 views
8

Есть ли способ, которым мы можем программно переключаться с установленными клавиатурами (без перехода в раздел настроек вручную)?Программно программировать профиль клавиатуры

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

(в основном мы хотим сократить шаг, чтобы передать его на странице настроек)

ответ

18

Этот фрагмент кода будет выполнять ваши требования:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); 
imeManager.showInputMethodPicker(); 

Как CommonsWare указывает в своем ответе, нет никакого способа, чтобы сделать это за спиной пользователя.

+0

согласен с тем, что сказал Commonsware, но я принял ваш ответ, потому что это мое исследовательское приложение для исследования пользователя, и его не собирается играть в магазин (я должен был упомянуть об этом в исходном вопросе). – rajankz

4

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

К счастью, нет, из соображений безопасности. Если приложение может диктовать, какой редактор метода ввода используется, вредоносное ПО изменит редактор метода ввода на свой кейлоггер.

+0

Я думаю, вы поняли вопрос. Rajankz хотел знать, есть ли способ переключаться между установленными клавиатурами, а не как устанавливать клавиатуру. – Robert

+3

@Robert: Я прекрасно понял вопрос, спасибо. – CommonsWare

+0

Хорошо. В таком случае не могли бы вы подумать об угрозе безопасности? Это, безусловно, может раздражать, но я не вижу никаких рисков при переключении между утвержденными методами ввода. – Robert

10

Если у вас есть внедренное устройство, вы можете использовать служебную программу /system/bin/ime.

Списка всех установленных методы ввод: клавиатура # ime list -a

Установить Google как по умолчанию:
# ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

На стороне использования Java Runtime.getRuntime().exec(...).

+1

Вам следует запустить 'ime enable ... 'before' ime set ... ' – Benny

11

Если ваше приложение имеет системные привилегии, и имеет разрешение

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 

вы можете включить программно клавиатуры и установить его в качестве текущей клавиатуры, сделав его клавиатуры по умолчанию БЕЗ ЗНАНИЙ ПОЛЬЗОВАТЕЛЯ ИЛИ ВМЕШАТЕЛЬСТВО!

//get the old default keyboard in case you want to use it later, or keep it enabled 
String oldDefaultKeyboard = Settings.Secure.getString(resolver, Setting.Secure.DEFAULT_INPUT_METHOD); 

//enable your keyboard 
Settings.Secure.putString(resolver, Settings.Secure.ENABLED_INPUT_METHODS, "com.my.keyboard/.full.path"); 

//set your keyboard as the new default keyboard 
Settings.Secure.putString(resolver, Settings.Secure.DEFAULT_INPUT_METHOD, "com.my.keyboard/.full.path"); 

Вы можете включить несколько клавиатур (например, клавиатуры по умолчанию и самостоятельно), предоставляя список клавиатур к ENABLED_INPUT_METHODS, разделенных «:». См docs

Вы можете проверить полный пакет вашей клавиатуры и пути ID, вызывая ime list -a через adb shell

+0

Мне нравится ваш подход, он полезен для приложений с системными привилегиями. Есть ли аналогичный способ изменения подтипа IME, например, с английского на французский? Я пытаюсь с помощью 'Settings.Secure.putInt (resolver, Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE, subTypeId)', но у меня возникают проблемы с получением subTypeId в первую очередь. Из источников я вижу, что он равен внутреннему 'mSubtypeId', но это не раскрывается, насколько я могу судить. – mtsahakis

+0

Этот ответ действительно очень помог мне. Благодаря :) – Aakanksha

0
InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); 
    imeManager.showInputMethodPicker(); 

Этот код подскажет пользователю изменить стандартную клавиатуру