如何知道Android用户是否通过后台服务与手机进行交互/使用?

时间:2016-02-19 02:09:26

标签: android android-intent

我正在制作电池应用来监控用户的充电行为。基本上,它是一个后台日志服务器,可以保存您的充电配置文件并对其进行分析。由于用户可能在充电期间使用他们的电话(例如,玩游戏),这改变了充电行为。因此,我的应用程序必须将这些数据与其他数据区分开来。

检测人们是否通过前台应用程序使用手机是微不足道的(您只需检查用户是否正在触摸您的UI)。但是,我发现后台服务做同样的事情是相对具有挑战性的。我想到的唯一方法就是检查屏幕的亮度。但是,人们也可能会在屏幕上打开电话。

有人能就这个问题给我一些建议吗?

---------嗨,这是我的问题的更新--------

首先,获得前景应用程序的技巧在Android 5.0之后不起作用(它也发布了getRunningTasks doesn't work in Android L)。在Android 5.0之后,“getRunningAppProcesses()”仅返回您的应用。根据Stackoverflow中的其他讨论,有一种替代方法可以使用app统计信息但需要系统权限。此外,它也不适用于某些手机(在我的测试中,大多数三星手机无法找到启用此功能的选项)。

其次,我测试了一些手机中的前景应用技巧(5.0之前),但我认为它不符合了解用户是否“与手机交互”的目的。例如,用户可能正在运行一个应用程序并且只是走了几个小时,但前台应用技巧仍然认为手机正在使用(但事实并非如此)。

1 个答案:

答案 0 :(得分:0)

您可以通过ActivityManager完成此操作。

查看this代码:

修改:

截至棒棒糖, getRunningTasks()已弃用。因此,最好使用 getRunningAppProcesses()

示例代码:

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) {
    return;
}
for (RunningAppProcessInfo appProcess : appProcesses) {
  if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
    //do what you want to do
  }
}

示例代码的信用:https://stackoverflow.com/a/8490088/1594776