我希望知道是否有可能编写一个Android应用程序,当它在后台运行时,它可以跟踪用户活动?(例如用户使用的其他应用程序,用户拨打的电话号码,GPS位置对于用户等)因为我不确定一个Android应用程序可以对其他应用程序做出反应,有人知道答案吗?感谢
答案 0 :(得分:6)
在一般情况下,不,你不能。用户可能会更喜欢它。
有人说过,有一些部分解决方案。有时系统非常有用,它会发布Intent反映用户操作的内容:例如,当用户uninstalls an app时 - 注意到您没有在应用程序本身上获得该意图被卸载。
过去,before Jelly Bean (4.1)个应用程序可以读取其他应用程序发布的日志,并尝试从那里提取信息,但这是一个麻烦,容易出错,忘恩负义的任务。例如,浏览器在导航到某个页面时不显示任何内容。您可以使用adb logcat
读取日志一段时间,以了解可能的内容和不可行的内容。此操作需要the relevant permission,现在常规应用无法保留。
感谢@WebnetMobile关于日志和@CommonsWare的链接,请参阅下面的评论。
答案 1 :(得分:1)
幸运的是,不应该在该级别监视用户。某些功能可以通过滥用android中的bug来实现,这将很快得到修复。我完全没理由你知道我打电话的号码以及我最近在哪里。这基本上不属于你的业务。
答案 2 :(得分:1)
是的,你可以。
您可以在此处查看有关电话信息的信息: Track a phone call duration
或
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
答案 3 :(得分:0)
你当然可以,但我认为通过互联网向用户不知情地报告数据会被视为间谍软件,而且在大多数司法管辖区几乎肯定是非法的。