안드로이드 개발 질문/답변
(글 수 45,052)
에딧텍스트를 롱클릭 하면 나오는 입력 방법 리스트에 있는 키보드 이름을 가져오고 싶은데 어떻게하면될까요?
할룽!
2012.01.02 14:10:47
키보드만 불러오는 방법이 있었네요.
PackageManager pm = getPackageManager();
ArrayList<String> keyboard = new ArrayList<String>();
Intent intent = new Intent(InputMethod.SERVICE_INTERFACE);
List<ResolveInfo> keyboards = pm.queryIntentServices(intent, PackageManager.GET_SERVICES);
for(ResolveInfo ri:keyboards){
String label = ri.loadLabel(getPackageManager()).toString();
keyboard.add(label);
}
Log.d("======================================","keyboard:"+keyboard);




흠... 저는 좀 무식한 방법인거 같은데... 일단 키보드는 서비스로 동작을 하니까요.
설치된 서비스 앱을 모두 불러와서 서비스에 퍼미션을 확인해 봅니다.
소프트 키보드 퍼미션인 android.permission.BIND_INPUT_METHOD 가 있는지 말입니다.
있으면 해당 어플리케이션을 키보드라고 가정하고 라벨을 저장하면 될 것 같네요.
좀 더 깔끔한 방법은 다른 분이 알려주실거에요~
ArrayList<String> keyboard = new ArrayList<String>();
List<PackageInfo> list = getPackageManager().getInstalledPackages(PackageManager.GET_SERVICES);
String keyboardPermission = "android.permission.BIND_INPUT_METHOD";
for(PackageInfo pi:list){
ServiceInfo services[] = pi.services;
if(services == null) continue;
for(ServiceInfo si:services){
if(keyboardPermission.equals(si.permission)){
String label = getPackageManager().getApplicationLabel(si.applicationInfo).toString();
keyboard.add(label);
}
}
}
Log.d("======================================","keyboard:"+keyboard);