如何在内部跟踪Android手机操作?

时间:2014-06-27 13:46:10

标签: android api internal operations tracker

我想开发一个移动应用程序,用于存储所有用户操作,例如点击,选择,滑动和关闭应用程序到数据库中。我必须存储按钮名称,id和操作时间。

如何在不影响正在运行的其他应用的情况下在Android中跟踪该内容?

1 个答案:

答案 0 :(得分:1)

没有本地方法可以做到这一点,因为暴露一个(简单)API来实现这一点将允许太多人轻松跟踪用户的操作,包括他们在(虚拟)键盘上键入的密码,所以这提出了真正的安全问题。假设您开发的应用程序将此跟踪作为其主要目的(而非背景“附加”非广告跟踪),这不是一个问题。

通过使用叠加层可以捕获某些事件而不会干扰其他活动。在您创建捕获窗口的Service中,使用TYPE_SYSTEM_OVERLAY将其指定为FLAG_WATCH_OUTSIDE_TOUCH

mView = new TouchCaptureView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);

然后覆盖您的触摸捕获视图onTouchEvent以记录数据库中的每个MotionEvent。 但是,这不允许您知道用户实际点击了什么,它可以是按钮,复选框等,并且没有方式知道(加上控件可能是自定义实现) )。确定最终的操作几乎是不可能的,因为应用程序不会将用户的操作广播到其他应用程序。 此外,从Android 4.0开始,叠加窗口不再捕获事件,TYPE_SYSTEM_ALERT仍然会干扰其他活动。

TL; DR:你不能。