【问题标题】:How can i track the android phone operations internally?如何在内部跟踪 android 手机操作?
【发布时间】:2014-06-27 13:46:10
【问题描述】:

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

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

【问题讨论】:

  • 您可能还没有找到解决整个问题的方法,但到目前为止您发现了什么?你在哪里看过?
  • 我搜索了是否有任何 api 来跟踪 android 手机操作。但我不能得到。
  • 快速浏览一下 Android SDK,我发现了 GestureDetectorInputEvent 类 - 这些可能是一个很好的起点 - 但目前您的问题非常广泛。如果您可以使其更具体,人们将能够为您提供更具体的帮助。
  • 是的。但我的目标是,如果您使用我的应用程序,它将跟踪手机中的所有操作。假设如果您打开可以在 sqlite 中跟踪和存储详细信息的 fb messenger。之后,您打开了 playmusic 应用程序,该应用程序的详细信息也存储了该应用程序。在该播放音乐应用程序中,您单击一首歌曲来播放该详细信息,我还将存储该数据库。我想要这种类型的应用程序。我想你明白我的意思了。

标签: android api internal operations tracker


【解决方案1】:

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

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

【讨论】:

  • The list of permissions an app can request 应该告诉你什么是可能的。正如 gravgun 指出的那样,出于非常有效的安全原因,监听其他应用程序中的事件似乎不是其中之一。
猜你喜欢
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 2019-04-02
  • 1970-01-01
  • 2011-12-01
  • 2015-09-20
相关资源
最近更新 更多