2010-11-17 4 views
2

J'essaie d'afficher une liste de toutes les méthodes d'entrée actuellement installées sur le téléphone. Je reçois une liste d'objets InputMethodInfo en faisant ceci:Comment puis-je obtenir une liste de toutes les méthodes de saisie (et leurs noms) installées sur le téléphone?

InputMethodManager imeManager = (InputMethodManager)getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); 
List<InputMethodInfo> InputMethods = imeManager.getEnabledInputMethodList(); 

Cela fonctionne, mais l'objet InputMethodInfo ne dispose pas d'un nom convivial sur partout. Par exemple, au lieu de "Swype" il me donnera "com.swype.android.inputmethod.SwypeInputMethod"

Ce n'est pas un moyen très convivial pour afficher la liste à l'utilisateur, et ces noms de paquets ne sont pas suivez un modèle strict, donc je n'ai aucun moyen d'analyser le nom du clavier de manière fiable. J'ai même essayé d'obtenir vraiment de fantaisie et obtenir l'objet ServiceInfo InputMethodInfo correspondant afin que je puisse résoudre son entier Label Resource, mais je reçois juste NameNotFoundExceptions chaque fois que cela s'exécute.

ComponentName componentName = inputMethodInfo.getComponent(); 
ServiceInfo serviceInfo = packageManager.getServiceInfo(componentName, 0); 
Resources resources = getResources(); 
try 
{ 
String imeServiceLabel = resources.getString(serviceInfo.labelRes); 
} 
catch (NameNotFoundException e) { } 

Est-ce que quelqu'un sait comment accomplir cela? Peu importe comment je dois le faire, je dois juste être en mesure de produire une liste de méthodes de saisie telles qu'elles apparaissent dans le menu Langue et Claviers du téléphone, puis stocker la sélection de l'utilisateur. J'ai pensé que je pourrais peut-être utiliser simplement le InputMethodManager pour lancer le menu de sélection de méthode d'entrée standard, puis voir celui que l'utilisateur a choisi en regardant quel IME est actuellement sélectionné après la fermeture du menu, mais pour autant que je sache quel IME est actuellement sélectionné dans le système.

Répondre

6

J'ai perdu beaucoup de temps là-dessus quand c'était juste sous mon nez. J'ai découvert la réponse à ma propre question pendant que je faisais autre chose. Cela vous donnera le nom convivial d'une méthode d'entrée via l'objet InputMethodInfo standard.

inputMethodInfo.loadLabel(packageManager).toString();

Je suis trop utilisé pour écrire C# où tout est mis en œuvre comme la propriété, donc je ne la plupart de mon enquête en regardant à travers des propriétés d'objet au moment de l'exécution. Java, cependant, offre la plupart de ce type d'informations par le biais de méthodes publiques, et je viens de le remarquer lorsque la boîte de saisie semi-automatique est apparue dans Eclipse.

Questions connexes