Giter Site home page Giter Site logo

pqpo / inputmethodholder Goto Github PK

View Code? Open in Web Editor NEW
425.0 425.0 57.0 118 KB

A keyboard listener for Android which by hooking the InputMethodManager. 通过hook监听系统键盘显示

Home Page: https://pqpo.me/

License: Apache License 2.0

Java 100.00%
hook inputmethod

inputmethodholder's Issues

在android 4.4上不生效

06-19 10:25:56.721 12910-12910/pw.qlm.softinputmethodlistener W/InputMethodHolder: hook failed! detail:java.lang.ClassNotFoundException: android.app.SystemServiceRegistry at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:251) at java.lang.Class.forName(Class.java:216) at pw.qlm.inputmethodholder.compat.SystemServiceRegistryCompat.Class(SystemServiceRegistryCompat.java:17) at pw.qlm.inputmethodholder.compat.SystemServiceRegistryCompat.getSystemFetcher(SystemServiceRegistryCompat.java:23) at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.clearCachedService(InputMethodManagerHook.java:70) at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.onHook(InputMethodManagerHook.java:60) at pw.qlm.inputmethodholder.InputMethodHolder.init(InputMethodHolder.java:41) at pw.qlm.sample.MyApplication.attachBaseContext(MyApplication.java:18) at android.app.Application.attach(Application.java:181) at android.app.Instrumentation.newApplication(Instrumentation.java:991) at android.app.Instrumentation.newApplication(Instrumentation.java:975) at android.app.LoadedApk.makeApplication(LoadedApk.java:502) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4301) at android.app.ActivityThread.access$1500(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NoClassDefFoundError: android/app/SystemServiceRegistry at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:251)  at java.lang.Class.forName(Class.java:216)  at pw.qlm.inputmethodholder.compat.SystemServiceRegistryCompat.Class(SystemServiceRegistryCompat.java:17)  at pw.qlm.inputmethodholder.compat.SystemServiceRegistryCompat.getSystemFetcher(SystemServiceRegistryCompat.java:23)  at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.clearCachedService(InputMethodManagerHook.java:70)  at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.onHook(InputMethodManagerHook.java:60)  at pw.qlm.inputmethodholder.InputMethodHolder.init(InputMethodHolder.java:41)  at pw.qlm.sample.MyApplication.attachBaseContext(MyApplication.java:18)  at android.app.Application.attach(Application.java:181)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:502)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4301)  at android.app.ActivityThread.access$1500(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.ClassNotFoundException: Didn't find class "android.app.SystemServiceRegistry" on path: DexPathList[[zip file "/data/app/pw.qlm.softinputmethodlistener-1.apk"],nativeLibraryDirectories=[/data/app-lib/pw.qlm.softinputmethodlistener-1, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:251)  at java.lang.Class.forName(Class.java:216)  at pw.qlm.inputmethodholder.compat.SystemServiceRegistryCompat.Class(SystemServiceRegistryCompat.java:17)  at pw.qlm.inputmethodholder.compat.SystemServiceRegistryCompat.getSystemFetcher(SystemServiceRegistryCompat.java:23)  at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.clearCachedService(InputMethodManagerHook.java:70)  at pw.qlm.inputmethodholder.hook.InputMethodManagerHook.onHook(InputMethodManagerHook.java:60)  at pw.qlm.inputmethodholder.InputMethodHolder.init(InputMethodHolder.java:41)  at pw.qlm.sample.MyApplication.attachBaseContext(MyApplication.java:18)  at android.app.Application.attach(Application.java:181)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:502)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4301)  at android.app.ActivityThread.access$1500(ActivityThread.java:135)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5001)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  at dalvik.system.NativeStart.main(Native Method)  06-19 10:25:56.731 12910-1

监听键盘收起

我发现输入法启动的时候,会回调IInputMethodManagerService中的windowGainedFocus该方法,这个方法中会创建EditText和InputMethodService的通道,即IInputConnectionWrapper,在创建这个Binder的过程中,需要参数InputConnection对象,而这里是可以hook住的。这样键盘收起的时候就可以监听到了。测试6.0可以检测到,不知道对于完善你的Hook是否有帮助,麻烦了。

关于Hook住EditText中InputConnection的问题

虚拟键盘在更新输入框文字的时候是通过InputConnection这个最后来实现的,为什么Hook不住EditText中的InputConnection呢?
实际效果是Hook完毕后,点击虚拟键盘上面的文字,并没有回调InputConnection中相应的方法

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.