从后台Android服务获取特定于应用程序的运动数据

从后台Android服务获取特定于应用程序的运动数据,android,android-service,Android,Android Service,我想做一个在后台运行的服务,当用户使用其他应用程序时,使用运动传感器(如加速计)捕获运动数据。我还希望能够根据当时运行的应用程序来区分运动数据集。例如,服务的输出可以是: App A : [Data set taken for the motion sensor while app A was running] App B : [Data set taken for the motion sensor while app B was running] ... 我对在后台运行捕获运动数据的服务感

我想做一个在后台运行的服务,当用户使用其他应用程序时,使用运动传感器(如加速计)捕获运动数据。我还希望能够根据当时运行的应用程序来区分运动数据集。例如,服务的输出可以是:

App A : [Data set taken for the motion sensor while app A was running]
App B : [Data set taken for the motion sensor while app B was running]
...

我对在后台运行捕获运动数据的服务感到满意;然而,我不知道如何根据前台的应用程序来分离这些数据。有人知道如何做到这一点吗?您如何确定什么应用程序启动/移动到前台以及何时启动/移动到前台,然后更新后台服务,使其将数据存储在该应用程序的数据集下?

听起来您只是希望您的服务找到前台活动是什么。你可以在StackOverflow的其他问题中找到这些信息,比如一个。简而言之,您需要使用
ActivityManager.getRunningTasks()
。最上面的活动是列表中的第一项


听起来您还需要在应用程序清单中请求适当的权限。

因此,据我所知,我需要持续轮询最顶层的活动,当它发生变化时,我会更新数据集标签。是这样吗?据我所知,没有一个ContentProvider可以通知您更改,因此我相信您必须在需要时获取前台活动,或者轮询ActivityManager来维护当前活动。您希望捕获运动数据的频率将决定哪个更合适。如果频率很高,我会定期(但频率较低)轮询ActivityManager。如果您正在寻找动作手势(例如,确定设备已“摇晃”),并且仅在手势完成时需要当前活动,则只需调用ActivityManager即可。