美文网首页
重复点击反射处理 hook

重复点击反射处理 hook

作者: 细雨么么 | 来源:发表于2019-12-04 16:55 被阅读0次
    package com.vortex.test;
    
    import android.view.View;
    
    /**
     * Created by Administrator (chenPS) on 2019/10/8.
     */
    
    public class HookListener implements View.OnClickListener{
    
        private long lastClick=0;
        private View.OnClickListener mOnClickListener;
    
        public HookListener(View.OnClickListener onClickListener) {
            mOnClickListener = onClickListener;
        }
    
        @Override
        public void onClick(View v) {
            long nowClick=System.currentTimeMillis();
            if(nowClick-lastClick>2000){
                mOnClickListener.onClick(v);
            }
        }
    }
    
    
    package com.vortex.test;
    
    import android.view.View;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    /**
     * Created by Administrator (chenPS) on 2019/10/8.
     */
    
    public class HookView {
    
    
        public static void hookView(View view){
            try {
                /**
                 * 标准类的 mlistener 属性
                 */
                Class<?>  lisInfo=Class.forName("android.view.View$ListenerInfo");
                Field  listener=lisInfo.getDeclaredField("mOnClickListener");
                listener.setAccessible(true);
                /**
                 * 反射出来的 view 属性
                 */
                Method vLisInfo=View.class.getDeclaredMethod("getListenerInfo");
                vLisInfo.setAccessible(true);
                Object viewListenerInfo=vLisInfo.invoke(view);
                /**
                 * 获取反射view 的 属性
                 */
                View.OnClickListener originClicklistener= (View.OnClickListener) listener.get(viewListenerInfo);
                View.OnClickListener hookListener=new HookListener(originClicklistener);
                listener.set(viewListenerInfo,hookListener);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    
    }
    
    

    出处:https://blog.csdn.net/qq_32532321/article/details/80476797

    相关文章

      网友评论

          本文标题:重复点击反射处理 hook

          本文链接:https://www.haomeiwen.com/subject/ucplgctx.html