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

我们都知道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这个方法的。猜测应该是三星自家单独添加的隐藏方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值