背景中的活动识别

时间:2016-09-17 23:52:05

标签: android service activity-recognition

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

1)在主要活动(或单独的活动)中实施AlarmManager,在30秒内唤醒活动,将Google API客户端连接到Play服务,然后将PendingIntent发送到IntentService进行活动分析

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

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

评论:我的导师建议我使用AlarmManager,但是你经常将它用于网络更新之类的东西,因此间隔时间通常超过10分钟,而我需要30秒-1分钟。所以我对使用它犹豫不决。

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

2 个答案:

答案 0 :(得分:3)

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

requestActivityUpdates() documentation实际上特别提及在后台工作:

  

常见用例是应用程序希望在后台监视活动并在检测到特定活动时执行操作。要在不需要始终在后台消耗资源的服务的情况下执行此操作,检测到的活动将通过intent传递。应用程序指定PendingIntent回调(通常为IntentService),在检测到活动时将使用intent调用它。目标收件人可以使用ActivityRecognitionResult提取extractResult(android.content.Intent)。有关详细信息,请参阅PendingIntent的文档。

答案 1 :(得分:1)

我会推荐一种不同的方法。 Google活动识别API存在的问题是,在信任级别> 75之前,您无法确定报告某个事件。要获得> 75的置信度,您需要增加检测级别,这反过来会消耗大量电池。我建议尝试一些免费的SDK,如Atooma,tranql或Neura(你可以在网上找到它们)。这些可以让您更好地了解您的用户,在某些情况下,只消耗大约1%的电池续航时间