通过 Hook InputMethodManager 的方式监听系统软键盘的状态, 当然不仅仅是监听软键盘,类似的还可以hook其他系统服务。
使用方式:
- 导入SoftInputMethodHodler作为依赖库。
- 调用初始化方法
SoftInputMethodHolder.init(context);该方法会 hook InputMethodManager,所以建议越早调用越好,比如在Application中的void attachBaseContext(Context base)方法中。 - 需要监听的地方注册监听器:
SoftInputMethodHolder.registerListener(onInputMethodListener); - 不用忘记反注册:
SoftInputMethodHolder.unregisterListener(onInputMethodListener); - 应用退出时最好调用:
SoftInputMethodHolder.release();防止 Context 内存泄漏。
具体使用方法请看Sample,未做充分测试,在定制ROM中可能存在兼容性问题,欢迎提ISSUE
缺陷:
public interface OnInputMethodListener {
void onShow(boolean result);
/**
* 仅支持主动调用hideSoftInputFromWindow,会回调onHide()
* 通过系统按钮关闭软键盘的时候不会回调,
* 因为键盘在一个独立的进程中,我们hook的只是本地进程的一个binder代理
*/
void onHide(boolean result);
}

