InputMethod
  public
  
  
  
  interface
  InputMethod
  
  
  
| android.view.inputmethod.InputMethod | 
The InputMethod interface represents an input method which can generate key
 events and text, such as digital, email addresses, CJK characters, other
 language characters, and etc., while handling various input events, and send
 the text back to the application that requests text input.  See
 InputMethodManager for more general information about the
 architecture.
 
Applications will not normally use this interface themselves, instead
 relying on the standard interaction provided by
 TextView and EditText.
 
Those implementing input methods should normally do so by deriving from
 InputMethodService or one of its subclasses.  When implementing
 an input method, the service component containing it must also supply
 a SERVICE_META_DATA meta-data field, referencing an XML resource
 providing details about the input method.  All input methods also must
 require that clients hold the
 Manifest.permission.BIND_INPUT_METHOD in order to interact
 with the service; if this is not required, the system will not use that
 input method, because it can not trust that it is not compromised.
 
The InputMethod interface is actually split into two parts: the interface
 here is the top-level interface to the input method, providing all
 access to it, which only the system can access (due to the BIND_INPUT_METHOD
 permission requirement).  In addition its method
 createSession(android.view.inputmethod.InputMethod.SessionCallback)
 can be called to instantate a secondary InputMethodSession interface
 which is what clients use to communicate with the input method.
Summary
| Nested classes | |
|---|---|
| 
        
        
        
        
        interface | InputMethod.SessionCallback
 | 
| Constants | |
|---|---|
| String | SERVICE_INTERFACEThis is the interface name that a service implementing an input method should say that it supports -- that is, this is the action it uses for its intent filter. | 
| String | SERVICE_META_DATAName under which an InputMethod service component publishes information about itself. | 
| int | SHOW_EXPLICITFlag for  | 
| int | SHOW_FORCED
      This constant was deprecated
      in API level 35.
    Starting in  | 
| Public methods | |
|---|---|
| 
        abstract
        
        
        
        
        void | 
      attachToken(IBinder token)
      Called first thing after an input method is created, this supplies a unique token for the session it has with the system service. | 
| 
        abstract
        
        
        
        
        void | 
      bindInput(InputBinding binding)
      Bind a new application environment in to the input method, so that it can later start and stop input processing. | 
| 
        abstract
        
        
        
        
        void | 
      changeInputMethodSubtype(InputMethodSubtype subtype)
      Notify that the input method subtype is being changed in the same input method. | 
| 
        abstract
        
        
        
        
        void | 
      createSession(InputMethod.SessionCallback callback)
      Create a new  | 
| 
        abstract
        
        
        
        
        void | 
      hideSoftInput(int flags, ResultReceiver resultReceiver)
      Request that any soft input part of the input method be hidden from the user. | 
| 
        abstract
        
        
        
        
        void | 
      restartInput(InputConnection inputConnection, EditorInfo editorInfo)
      This method is called when the state of this input method needs to be reset. | 
| 
        abstract
        
        
        
        
        void | 
      revokeSession(InputMethodSession session)
      Disable and destroy a session that was previously created with
  | 
| 
        abstract
        
        
        
        
        void | 
      setSessionEnabled(InputMethodSession session, boolean enabled)
      Control whether a particular input method session is active. | 
| 
        abstract
        
        
        
        
        void | 
      showSoftInput(int flags, ResultReceiver resultReceiver)
      Request that any soft input part of the input method be shown to the user. | 
| 
        abstract
        
        
        
        
        void | 
      startInput(InputConnection inputConnection, EditorInfo editorInfo)
      This method is called when the application starts to receive text and it is ready for this input method to process received events and send result text back to the application. | 
| 
        abstract
        
        
        
        
        void | 
      unbindInput()
      Unbind an application environment, called when the information previously
 set by  | 
Constants
SERVICE_INTERFACE
public static final String SERVICE_INTERFACE
This is the interface name that a service implementing an input
 method should say that it supports -- that is, this is the action it
 uses for its intent filter.
 To be supported, the service must also require the
 Manifest.permission.BIND_INPUT_METHOD permission so
 that other applications can not abuse it.
Constant Value: "android.view.InputMethod"
SERVICE_META_DATA
public static final String SERVICE_META_DATA
Name under which an InputMethod service component publishes information
 about itself.  This meta-data must reference an XML resource containing
 an
 <
 tag.input-method>
Constant Value: "android.view.im"
SHOW_EXPLICIT
public static final int SHOW_EXPLICIT
Flag for showSoftInput(int, ResultReceiver): this show has been explicitly
 requested by the user.  If not set, the system has decided it may be
 a good idea to show the input method based on a navigation operation
 in the UI.
Constant Value: 1 (0x00000001)
SHOW_FORCED
public static final int SHOW_FORCED
      This constant was deprecated
      in API level 35.
    Starting in ERROR(Android B/Build.VERSION_CODES#BAKLAVA Android B),
 InputMethodManager.SHOW_IMPLICIT is deprecated and has no effect, therefore all
 requests will have this flag set. IMEs should no longer react to this flag.
  
Flag for showSoftInput(int, ResultReceiver): this show has been forced to
 happen by the user.  If set, the input method should remain visible
 until deliberated dismissed by the user in its UI.
Constant Value: 2 (0x00000002)
Public methods
attachToken
public abstract void attachToken (IBinder token)
Called first thing after an input method is created, this supplies a unique token for the session it has with the system service. It is needed to identify itself with the service to validate its operations. This token must not be passed to applications, since it grants special priviledges that should not be given to applications.
The system guarantees that this method is called back between
 InputMethodService.onCreate() and InputMethodService.onDestroy()
 at most once.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| token | IBinder | 
bindInput
public abstract void bindInput (InputBinding binding)
Bind a new application environment in to the input method, so that it
 can later start and stop input processing.
 Typically this method is called when this input method is enabled in an
 application for the first time.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| binding | InputBinding: Information about the application window that is binding
 to the input method. | 
See also:
changeInputMethodSubtype
public abstract void changeInputMethodSubtype (InputMethodSubtype subtype)
Notify that the input method subtype is being changed in the same input method.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| subtype | InputMethodSubtype: New subtype of the notified input method | 
createSession
public abstract void createSession (InputMethod.SessionCallback callback)
Create a new InputMethodSession that can be handed to client
 applications for interacting with the input method.  You can later
 use revokeSession(android.view.inputmethod.InputMethodSession) to destroy the session
 so that it can no longer be used by any clients.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| callback | InputMethod.SessionCallback: Interface that is called with the newly created session. | 
hideSoftInput
public abstract void hideSoftInput (int flags, 
                ResultReceiver resultReceiver)Request that any soft input part of the input method be hidden from the user.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| flags | int: Provides additional information about the hide request.
 Currently always 0. | 
| resultReceiver | ResultReceiver: The client requesting the show may wish to
 be told the impact of their request, which should be supplied here.
 The result code should beInputMethodManager.RESULT_UNCHANGED_SHOWN,InputMethodManager.RESULT_UNCHANGED_HIDDEN,InputMethodManager.RESULT_SHOWN, orInputMethodManager.RESULT_HIDDEN. | 
restartInput
public abstract void restartInput (InputConnection inputConnection, EditorInfo editorInfo)
This method is called when the state of this input method needs to be reset.
 Typically, this method is called when the input focus is moved from one
 text box to another.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| inputConnection | InputConnection: Optional specific input connection for
 communicating with the text box; if null, you should use the generic
 bound input connection. | 
| editorInfo | EditorInfo: The attribute of the text box (typically, a EditText)
        that requests input. | 
See also:
revokeSession
public abstract void revokeSession (InputMethodSession session)
Disable and destroy a session that was previously created with
 createSession(android.view.inputmethod.InputMethod.SessionCallback).
 After this call, the given session interface is no longer active and
 calls on it will fail.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| session | InputMethodSession: TheInputMethodSessionpreviously provided through
 SessionCallback.sessionCreated() that is to be revoked. | 
setSessionEnabled
public abstract void setSessionEnabled (InputMethodSession session, boolean enabled)
Control whether a particular input method session is active.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| session | InputMethodSession: TheInputMethodSessionpreviously provided through
 SessionCallback.sessionCreated() that is to be changed. | 
| enabled | boolean | 
showSoftInput
public abstract void showSoftInput (int flags, 
                ResultReceiver resultReceiver)Request that any soft input part of the input method be shown to the user.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| flags | int | 
| resultReceiver | ResultReceiver: The client requesting the show may wish to
 be told the impact of their request, which should be supplied here.
 The result code should beInputMethodManager.RESULT_UNCHANGED_SHOWN,InputMethodManager.RESULT_UNCHANGED_HIDDEN,InputMethodManager.RESULT_SHOWN, orInputMethodManager.RESULT_HIDDEN. | 
startInput
public abstract void startInput (InputConnection inputConnection, EditorInfo editorInfo)
This method is called when the application starts to receive text and it
 is ready for this input method to process received events and send result
 text back to the application.
 
 This method must be called from the main thread of your app.
| Parameters | |
|---|---|
| inputConnection | InputConnection: Optional specific input connection for
 communicating with the text box; if null, you should use the generic
 bound input connection. | 
| editorInfo | EditorInfo: Information about the text box (typically, an EditText)
        that requests input. | 
See also:
unbindInput
public abstract void unbindInput ()
Unbind an application environment, called when the information previously
 set by bindInput(InputBinding) is no longer valid for this input method.
 
 Typically this method is called when the application changes to be
 non-foreground.
 
 This method must be called from the main thread of your app.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-08-20 UTC.
