0
点赞
收藏
分享

微信扫一扫

Windows系统搭建VisualSVN并结合内网穿透实现远程访问本地服务

萍儿的小确幸 03-07 21:00 阅读 2

通过onTouch点击事件传递,利用dispatchTouchEvent来监控所有点击事件。

工具类:

//埋点监控点击事件工具类
public class BuryingPointUtils {
    private static BuryingBean buryingBean;
    private static List<BuryingBean.Data> marr = new ArrayList<>();

    public static void login() {
        //用户登录后保存用户操作
        buryingBean = new BuryingBean();
        buryingBean.setName("姓名");

    }

    public static BuryingBean getmList() {
        //用户退出返回所有操作日志
        if (buryingBean != null) {
            buryingBean.setMlist(marr);
//            marr.clear();
            LogUtils.d("返回::" + buryingBean.toString());
            return buryingBean;
        } else {
            return null;
        }

    }

    //注册点击事件,在activity的父类base中,实现dispatchTouchEvent方法,在里面写
    public static void registerRunningActivityTouchEvent() {
        Activity activity = getRunningActivity();
        for (View view : getAllChildViews(activity.getWindow().getDecorView())) {
            view.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_UP) {
                        if (view.getId() != -1) {
                            //捕捉到的点击事件

                            LogUtils.d("日志1:" + view.getId());
                            String viewId = activity.getResources().getResourceEntryName(view.getId());
                            LogUtils.d("日志 控件id:" + viewId);
                            LogUtils.d("日志 类名::" + activity.getClass().getName());
                            BuryingBean.Data data = new BuryingBean.Data();
                            data.setActivityName(activity.getClass().getName());
                            data.setTime(System.currentTimeMillis());
                            data.setViewID(viewId);
                            marr.add(data);
                            return false;
                        }
                        return false;
                    }
                    return false;
                }
            });
        }
    }

    //遍历所有子控件
    private static List<View> getAllChildViews(View view) {
        List<View> allchildren = new ArrayList<View>();
        if (view instanceof ViewGroup) {
            ViewGroup vp = (ViewGroup) view;
            for (int i = 0; i < vp.getChildCount(); i++) {
                View viewchild = vp.getChildAt(i);
                allchildren.add(viewchild);
                allchildren.addAll(getAllChildViews(viewchild));
            }
        }
        return allchildren;
    }

    //获取当前运行的activity对象
    @TargetApi(Build.VERSION_CODES.KITKAT)
    private static Activity getRunningActivity() {
        try {
            Class activityThreadClass = Class.forName("android.app.ActivityThread");
            Object activityThread = activityThreadClass.getMethod("currentActivityThread")
                    .invoke(null);
            Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
            activitiesField.setAccessible(true);
            ArrayMap activities = (ArrayMap) activitiesField.get(activityThread);
            for (Object activityRecord : activities.values()) {
                Class activityRecordClass = activityRecord.getClass();
                Field pausedField = activityRecordClass.getDeclaredField("paused");
                pausedField.setAccessible(true);
                if (!pausedField.getBoolean(activityRecord)) {
                    Field activityField = activityRecordClass.getDeclaredField("activity");
                    activityField.setAccessible(true);
                    return (Activity) activityField.get(activityRecord);
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        throw new RuntimeException("Didn't find the running activity");
    }


    public static class BuryingBean {
        private String name;//登录人
        List<Data> mlist;

        public void setName(String name) {
            this.name = name;
        }

        public void setMlist(List<Data> mlist) {
            this.mlist = mlist;
        }

        public String getName() {
            return name;
        }

        public List<Data> getMlist() {
            return mlist;
        }

        public static class Data {
            private String viewID;//点击的控件id
            private String activityName;//当前的类
            private Long time;//点击时间

            public void setViewID(String viewID) {
                this.viewID = viewID;
            }

            public void setActivityName(String activityName) {
                this.activityName = activityName;
            }

            public void setTime(Long time) {
                this.time = time;
            }

            public String getViewID() {
                return viewID;
            }

            public String getActivityName() {
                return activityName;
            }

            public Long getTime() {
                return time;
            }

            @Override
            public String toString() {
                return "Data{" +
                        "viewID='" + viewID + '\'' +
                        ", activityName='" + activityName + '\'' +
                        ", time=" + time +
                        '}';
            }
        }

        @Override
        public String toString() {
            return "BuryingBean{" +
                    "name='" + name + '\'' +
                    ", mlist=" + mlist +
                    '}';
        }
    }
}

在BaseActivity中调用

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
//        LogUtils.d("日志:dispatchTouchEvent:" + event.toString());
        if (event.getAction() == MotionEvent.ACTION_UP){

                BuryingPointUtils.registerRunningActivityTouchEvent();
           
        }
        return super.dispatchTouchEvent(event);
    }
举报

相关推荐

0 条评论