2013-08-28 104 views
2

在我的應用程序中,我需要讓用戶選擇一種輸入法。一旦被選中,我應該執行一些任務。如何檢測到用戶實際選擇了InputMethod檢測是否選擇了輸入法

這是用於顯示InputMethod列表的代碼。

InputMethodManager imeManager = (InputMethodManager) mw.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
if (imeManager != null) { 
    imeManager.showInputMethodPicker(); 
} else { 
    Toast.makeText(mw.getApplicationContext(), "IME ERROR", 
    Toast.LENGTH_LONG).show(); 
} 
+0

「在我的應用程序中,我需要讓用戶選擇一種輸入法」 - 爲什麼? – CommonsWare

+0

@CommonsWare因爲它處理特定輸入設備的行爲。 – Vektor88

回答

10

不幸的是,你不能捕捉到用戶在InputMethodPicker中選擇的輸入法。

但是,您可以在用戶選取後使用BroadcastReceiver來檢查它。
當IME改變時,Intent.ACTION_INPUT_METHOD_CHANGED將被廣播。

public class InputMethodChangeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equals(Intent.ACTION_INPUT_METHOD_CHANGED)) { 
      ..... 
      /* You can check the package name of current IME here.*/ 
     } 
    } 
} 

然後註冊它。

IntentFilter filter = new IntentFilter(Intent.ACTION_INPUT_METHOD_CHANGED); 
registerReceiver(mReceiver, filter); 
+0

謝謝,這足以滿足我的需求! – Vektor88

4

好吧,即使你接受了答案,有檢查,如果用戶選擇鍵盤作爲默認的方式:

public static boolean isThisKeyboardSetAsDefaultIME(Context context) { 
    final String defaultIME = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD); 
    return isThisKeyboardSetAsDefaultIME(defaultIME, context.getPackageName()); 
} 

public static boolean isThisKeyboardSetAsDefaultIME(String defaultIME, String myPackageName) { 
    if (TextUtils.isEmpty(defaultIME)) 
     return false; 

    ComponentName defaultInputMethod = ComponentName.unflattenFromString(defaultIME); 
    if (defaultInputMethod.getPackageName().equals(myPackageName)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

可以將此代碼代碼從這個answer,一旦結合用戶從中選擇鍵盤InputMethodPicker檢查您的鍵盤是否是默認鍵盤(意味着用戶選擇了它)。

如果您對實現鍵盤有更多疑問,請檢查此project。乾杯。

相關問題