2014-07-04 21 views
3

如何在用戶啓用特定IME(或者可能只是任何ime,如果這是唯一可能)後關閉IME設置活動(ACTION_INPUT_METHOD_SETTINGS),就像Google鍵盤確實。Android - 在用戶啓用輸入法後關閉IME設置活動

我都試過:

Intent enableIntent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS); 
     //enableIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     activity.startActivityForResult(enableIntent, 0); 

和:

Intent enableIntent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS); 
     enableIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(enableIntent); 

但它不能返回到調用活動一旦項目被選中/啓用。

谷歌鍵盤打開IME輸入設置屏幕,一旦啓用鍵盤(單擊複選框),設置活動關閉,用戶返回到先前的嚮導活動。

+0

不,我想到了一個辦法,但沒有測試它。 一旦鍵盤被啓用,您可以輕鬆檢測到,所以一旦發生這種情況,您可以將您的活動稱爲 – behelit

回答

2

我也很難解決這個問題。直到我意識到我可以檢查AOSP實施here。具體來說,結賬SetupWizardActivity。對我來說,看起來是谷歌加速Handler這將輪詢國家。具體來說,嘗試按照SettingsPoolingHandler#handleMessage

具體做法是:

step1.setAction(new Runnable() { 
     @Override 
     public void run() { 
      invokeLanguageAndInputSettings(); 
      handler.startPollingImeSettings(); 
     } 
    }); 


    public void startPollingImeSettings() { 
     sendMessageDelayed(obtainMessage(MSG_POLLING_IME_SETTINGS), 
       IME_SETTINGS_POLLING_INTERVAL); 
    } 

    @Override 
    public void handleMessage(final Message msg) { 
     final SetupWizardActivity setupWizardActivity = getOwnerInstance(); 
     if (setupWizardActivity == null) { 
      return; 
     } 
     switch (msg.what) { 
     case MSG_POLLING_IME_SETTINGS: 
      if (UncachedInputMethodManagerUtils.isThisImeEnabled(setupWizardActivity, 
        mImmInHandler)) { 
       setupWizardActivity.invokeSetupWizardOfThisIme(); 
       return; 
      } 
      startPollingImeSettings(); 
      break; 
     } 
    } 


    void invokeSetupWizardOfThisIme() { 
     final Intent intent = new Intent(); 
     intent.setClass(this, SetupWizardActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 
       | Intent.FLAG_ACTIVITY_SINGLE_TOP 
       | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     mNeedsToAdjustStepNumberToSystemState = true; 
    } 
+0

,這很基本上就是我所建議的 – behelit