7

我想知道是否可以编写一个在后台运行时可以跟踪用户活动的android应用程序?(例如用户使用了哪些其他应用程序,用户拨打了什么电话号码,用户的GPS位置,等)因为我不确定单个 android 应用程序能否对其他应用程序做出反应,有人知道答案吗?谢谢

4

4 回答 4

6

在一般情况下,不,你不能。用户可能会更喜欢它。

说了这么多,就有了一些局部的解决方案。有时系统非常有用,它会发布反映用户操作的Intent:例如,当用户卸载应用程序时- 需要注意的是,您不会在应用程序本身被卸载时获得该意图。

在 Jelly Bean (4.1) 之前,应用程序可以读取其他应用程序发布的日志并尝试从中提取信息,但这是一项繁琐、容易出错、忘恩负义的任务。例如,浏览器在导航到某个页面时什么也不显示。您可能会阅读日志一段时间,adb logcat以了解什么是可能的,什么是不可能的。此操作需要相关权限,现在普通应用程序无法拥有该权限。

感谢@WebnetMobile 提供有关日志的提示,感谢@CommonsWare 提供链接,请参阅下面的评论。

于 2012-11-21T18:33:26.080 回答
1

幸运的是,在该级别监视用户是不可能的。某些功能可以通过滥用 android 中的错误来实现,这些错误迟早会被修复。我认为您绝对没有理由知道我正在拨打的电话号码以及我最近在哪里。基本上不关你的事。

于 2012-11-21T18:34:14.723 回答
1

是的你可以。

例如,您可以在此处查看电话信息: 跟踪电话通话时长

或者

http://www.anddev.org/video-tut__-_querying_and_displaying_the_calllog-t169.html

有一种方法可以让 Android 和用户知道您正在使用和访问他们的数据,以确定他们是否允许这样做。

我不确定您是否可以简单地访问任何应用程序,但理论上如果您知道如何读取可能可能的保存文件。

例如Runtime.getRuntime().exec("ls -l /proc");,将为您提供“proc”根文件夹,其中包含您可能需要的大量数据。这可能已经改变了,我不确定,我也不知道你需要什么。

也许要运行进程尝试:

public static boolean getApplications(final Context context) {
   ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
   List<RunningTaskInfo> tasks = am.getRunningTasks(1);
}

为此,您应该将其包含在您的 AndroidManifest.xml 中

<uses-permission android:name="android.permission.GET_TASKS" />

查看更多信息:http: //developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses%28%29

于 2012-11-21T18:39:20.777 回答
0

您当然可以,但我认为在用户不知情的情况下,通过互联网向您报告这些数据将被视为间谍软件,并且在大多数司法管辖区几乎肯定是非法的。

于 2012-11-21T18:31:06.233 回答