2012-12-05 38 views
1

我擴展了InputMethodService,希望使用此服務來顯示軟鍵盤,即使連接了硬鍵盤(基於以下帖子Show soft keyboard even though a hardware keyboard is connected)。有沒有辦法在應用程序內綁定到這個服務,而不必在清單中聲明它?最終結果是使InputMethodService.onEvaluateInputViewShown返回true,這樣即使連接了硬鍵盤,軟鍵盤也會顯示。使用輸入法服務的子類

我想用擴展的類MultiInputMethodService在顯示/ hideSoftKeyboard的inputmethodmanager:

public class MultiInputMethodService extends InputMethodService { 

     @Override 
     public boolean onEvaluateInputViewShown() { 
      Log.i("onEvaluateInputViewShow","onEvaluateInputViewShown"); 
      return true; 
     } 
} 

我的活動:

private void showSoftKeyboard() { 
     InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); 
    } 

    private void hideSoftKeyboard() { 
     InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(this.myInput.getEditText().getWindowToken(), 0); 
    } 

回答

0

的IMS架構真正需要作爲一個整體。如果你想成爲鍵盤,用戶需要通過設置選擇你作爲默認鍵盤。如果你試圖直接與服務綁定,我不確定會有什麼結果,但我的猜測是它會很糟糕。通過讓用戶將您設置爲默認鍵盤,您將自動用作所有應用程序中的鍵盤。

當然,您不能僅僅爲了安全目的而設置它。否則,鍵盤會在設置上發生爭執。用戶必須手動設置它。

編輯: 我發現你是指文件(下簡稱「安保科」):

http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html

客戶端應用程序可以要求該系統讓用戶選擇一個新的 IME,但不能以編程方式自行切換到一個。這可以避免 惡意應用程序將用戶切換到他們自己的IME,當用戶導航到另一個應用程序時,這些 仍然在運行。 另一方面,IME允許以編程方式將 系統切換到另一個IME,因爲它已經完全控制了用戶 輸入。

用戶必須在設置中明確啓用新的IME,然後才能切換到此設置,以便與系統確認他們知道該設置,並且 要使其可用。

相關問題