在后台跟踪用户的短信和地理位置 - 我的想法有效吗?

时间:2011-10-09 01:48:21

标签: android

我对Android很新鲜。我面对一些雄心勃勃的大学项目,所以我希望你能告诉我,我对跟进应用程序实施的想法是否正确和有效:

业务场景:

  • WebService使用有关用户短信(发送/接收)和GPS /“网络提供”位置的信息
  • GPS /“网络提供”位置应每1分钟发送到WebService(如果值已更改)
  • sms update应该立即发送到WebService

我的实施理念......

我将使用AlarmManager准备Intent匹配BroadcastReceiver(并以1分钟的间隔安排它)。然后我将在onReceive()方法中启动WakefullIntentService。这将在后台提供我的WebService。这适用于在后台通过HTTP发送数据。

......和疑惑:

如何在后台更新GPS /“网络提供的”位置数据?我应该开始一些额外的服务并在其中使用LocationListener吗?那么使用AlarmManager是没有意义的 - 我可以从这个位置监控服务提供我的WebService。

但正如我在此读到的那样:Diamonds Are Forever. Services Are Not.玩永无止境的服务并不是一个好习惯。据我所知,当我的手机正在睡觉时它无法正常工作。

2 个答案:

答案 0 :(得分:0)

首先,每分钟轮询GPS将会杀死用户电池。所以我会重新考虑你申请的这一部分。

除了使用Wakeful IntentService之外,您的警报管理器理论在理论上很好。如果你每分钟(或更频繁地)唤醒手机,你就会再次杀死电池。你应该做的是当你获得广播时,将数据包含的内容保存到磁盘(可能在sqlite数据库中)。当设备完全唤醒时(这是您可以收到的广播),然后将内容刷新到您的网络服务。

答案 1 :(得分:0)

请勿使用闹钟管理器。你不想做什么。

使用实现LocationListener的后台服务。您可以指定检查位置更新的频率,甚至可以指定必须更改多少距离才能将其视为新位置。这是在requestLocationUpdates方法中完成的。

以下是一些可以帮助您入门的代码:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 1, this);

这将尝试每60秒获取一个新位置,并且只有当距离改变了1米时才会这样。这就是位置监听器只有在满足上述条件时才会触发。

希望这有帮助。