How to Inspect Input Method Editors and Active Keyboard Sessions on Android Using ADB dumpsys input_method

On Android devices, virtual software keyboards, voice dictation engines, and physical accessory inputs are coordinated by the Input Method Framework (IMF). The central system coordinator, InputMethodManagerService (IMMS), manages the lifecycle of Input Method Editors (IMEs), handles window focus transitions, and relays user keystrokes to target editable text fields. When debugging soft keyboard display failures, unexpected keyboard dismissals, hardware keyboard shortcut issues, or input connection memory leaks, Android Debug Bridge (ADB) provides comprehensive insight through dumpsys input_method.

Android Input Method Architecture and Client Bindings

The Android Input Method Framework operates across three interrelated components:

  • InputMethodManagerService (System Server): The privileged system service responsible for discovering installed IMEs, switching the active input method, tracking window focus, and managing the IPC channel between the keyboard application and the client application.
  • Input Method Editor (IME): The keyboard service (such as Gboard, SwiftKey, or a custom accessibility keyboard) extending android.inputmethodservice.InputMethodService.
  • Input Connection Client: The focused application hosting an editable text view (such as an EditText). It exposes an InputConnection interface and publishes an EditorInfo bundle defining input types (numeric, email, password) and IME action buttons.

Dumping the Input Method Service Diagnostic State

To inspect the active keyboard configuration and connection state, run the diagnostic dump command via ADB:

# Dump the full InputMethodManagerService state
adb shell dumpsys input_method

The output provides an exhaustive breakdown of active clients, window tokens, and input parameters:

Current Input Method Manager state:
  mCurMethodId=com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
  mCurToken=android.os.Binder@7f9b8c1
  mCurClient=ClientState{3a4f89d pid=24155 uid=10234}
  mCurFocusedWindowClient=ClientState{3a4f89d pid=24155 uid=10234}
  mCurFocusedWindow=Window{829df14 u0 com.example.app/com.example.app.MainActivity}
  mCurId=com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
  mHaveConnection=true
  mVisibleBound=true
  mInputShown=true
  mImeWindowVis=IME_VISIBLE

Analysing Critical Diagnostics in dumpsys input_method

Reviewing the dumped properties reveals exactly why a soft keyboard is visible or suppressed:

  • mCurMethodId: The package and component name of the currently selected keyboard engine.
  • mCurFocusedWindow: The exact application window holding window focus. If focus is lost or attached to an invisible dialog overlay, the soft keyboard cannot bind.
  • mInputShown: A boolean flag (true or false) indicating whether the system server believes the virtual soft keyboard is currently displayed on screen.
  • mImeWindowVis: The display visibility state reported by the Window Manager (e.g. IME_VISIBLE, IME_BEHIND_IME, or 0).
  • mCurEditorInfo: Details the input attributes transmitted by the focused view, including inputType (e.g. TYPE_CLASS_TEXT|TYPE_TEXT_VARIATION_PASSWORD), imeOptions (such as actionDone or actionSearch), and privateImeOptions.

Managing Input Methods Using the ADB ime Tool

The Android shell includes a dedicated ime binary for querying, enabling, disabling, and switching keyboards from the terminal:

# List all installed input methods and their active status
adb shell ime list -s -a

# List only currently enabled input methods
adb shell ime list -s

# Switch the default system keyboard to another installed IME
adb shell ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

# Enable or disable an installed IME component
adb shell ime enable com.example.customkeyboard/.MyInputService
adb shell ime disable com.example.customkeyboard/.MyInputService

Simulating Keyboard Visibility and Text Input via ADB

To test how an application responds to input without manual typing on the physical screen, send synthetic key events and text strings through the input subsystem:

# Dispatch text into the currently focused EditText
adb shell input text "[email protected]"

# Send soft keyboard action keys (Enter, Tab, Backspace)
adb shell input keyevent KEYCODE_ENTER
adb shell input keyevent KEYCODE_TAB
adb shell input keyevent KEYCODE_DEL

# Dismiss an open virtual keyboard
adb shell input keyevent KEYCODE_BACK

Troubleshooting Common Soft Keyboard Failures

When the virtual keyboard fails to appear or displays unpredictable layout shifts:

  • Missing Window Focus: Check mCurFocusedWindow. If this is null, the view hierarchy does not hold keyboard focus, and requestFocus() must be called on the target input element.
  • Soft Input Mode Conflicts: If the keyboard covers input fields instead of resizing the layout, audit the activity’s windowSoftInputMode attribute (such as adjustResize versus adjustPan) in dumpsys window windows.
  • Input Connection Deadlocks: If mHaveConnection reports false while mInputShown is true, the IPC binder connection between the client app and the IME has dropped, typically requiring a restart of the client process.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.