后台活动识别

Gid*_*eon 3 service android activity-recognition

我正在制作一个使用 ActivityRecognition API 在后台跟踪用户活动的应用程序,如果用户在指定的时间段(例如 1 小时)内保持在同一个地方,那么系统会推送通知告诉用户散步。我已经实现了活动识别,但仅适用于打开应用程序的情况。显然,Google API 客户端需要保持连接才能发送活动更新。我的问题是 - 对于后台活动跟踪,什么是更好的解决方案:

1)在主activity(或单独activity)中实现AlarmManager,每30秒唤醒一次activity,连接Google API Client到Play Services,然后发送PendingIntent给IntentService进行activity分析

2)创建一个单独的服务(不是 IntentService)在后台持续运行(单独的线程),这将保持 API 客户端连接,并将活动更新发送到 IntentService。因此,系统将有 2 个服务:1) 保持 API 客户端连接到 Play 服务并将定期活动更新发送到 IntentService 进行分析的服务;2) IntentService 用于接收来自 Service 的活动更新,并分析数据。

3)其他一些解决方案(由你们提供)

评论:我的导师建议我使用AlarmManager,但您通常将其用于网络更新之类的事情,因此间隔通常超过10分钟,而我需要30秒-1分钟。所以我很犹豫要不要使用它。

我之前也在这里看到过很多类似的问题,但我还没有找到任何明确的答案。

ian*_*ake 5

实际上,GoogleApiClient仅在请求和删除活动更新时才需要连接-您不需要连接GoogleApiClient来接收活动更新

requestActivityUpdates()文档实际上特别提到在后台工作:

一个常见的用例是应用程序想要在后台监视活动并在检测到特定活动时执行操作。为了做到这一点,而无需在后台始终开启的服务消耗资源,检测到的活动是通过意图传递的。应用程序指定了一个 PendingIntent 回调(通常是IntentService),当检测到活动时,它将使用一个意图调用。意图接收者可以使用extractResult(android.content.Intent)提取ActivityRecognitionResult。有关更多详细信息,请参阅PendingIntent的文档。