三星手机判断输入法是否显示的方法

前言

我们都知道InputMethodManager是没有api,能够让第三方应用获取输入法是否显示的。

三星Note

最近使用了下三星S8自带的Note应用,发现它能够实时知道输入法是否显示。碰巧三星的Note应用可以从GP上下载,于是下载了apk反编译了源代码 研究了下,果然发现有检测输入法是否显示的方法:

    private boolean isInputMethodShown(Context context) {
        boolean isShown = false;
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            try {
                Method isInputMethodShown = imm.getClass().getMethod("isInputMethodShown", new Class[0]);
                isShown = (Boolean) isInputMethodShown.invoke(imm, new Object[0]);
            } catch (NoSuchMethodException e) {
            } catch (IllegalAccessException e) {
            } catch (InvocationTargetException e) {
            }
        }
        return isShown;
    }

验证

原理是通过反射InputMethodManagerisInputMethodShown方法。亲自测试了下比较旧的机型三星S4(Android 17)和最近的旗舰机型三星S8(Android 26),都能够正确检测到键盘的可见性。但是尝试了下其他机型小米和华为,是没有isInputMethodShown这个方法的。猜测应该是三星自家单独添加的隐藏方法。

你可能感兴趣的:(三星手机判断输入法是否显示的方法)