0

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

如何在 Android 中跟踪它而不干扰正在运行的其他应用程序?

4

1 回答 1

1

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

通过使用覆盖,可以在不干扰其他活动的情况下捕获一些事件。在您Service创建捕获窗口的位置中,将其指定为TYPE_SYSTEM_OVERLAYwith 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:你不能。

于 2014-06-27T14:19:28.533 回答