通过 Hook 监听系统软键盘状态

3,168 阅读1分钟

通过 Hook InputMethodManager 的方式监听系统软键盘的状态, 当然不仅仅是监听软键盘,类似的还可以hook其他系统服务。

使用方式:

  1. 导入SoftInputMethodHodler作为依赖库。
  2. 调用初始化方法 SoftInputMethodHolder.init(context); 该方法会 hook InputMethodManager,所以建议越早调用越好,比如在Application中的void attachBaseContext(Context base) 方法中。
  3. 需要监听的地方注册监听器:SoftInputMethodHolder.registerListener(onInputMethodListener);
  4. 不用忘记反注册:SoftInputMethodHolder.unregisterListener(onInputMethodListener);
  5. 应用退出时最好调用:SoftInputMethodHolder.release(); 防止 Context 内存泄漏。

具体使用方法请看Sample,未做充分测试,在定制ROM中可能存在兼容性问题,欢迎提ISSUE

缺陷:

public interface OnInputMethodListener {

void onShow(boolean result);

/**
 * 仅支持主动调用hideSoftInputFromWindow,会回调onHide()
 * 通过系统按钮关闭软键盘的时候不会回调,
 * 因为键盘在一个独立的进程中,我们hook的只是本地进程的一个binder代理
 */
void onHide(boolean result);

}

Sample演示