2013-02-16 65 views
0

我的应用程序:我正在开发基于位置的服务,它用于跟踪销售人员。情景是人xyz想跟踪他的销售人员,他将设置获取位置更新的时间和距离间隔,之后他将手机交给销售人员,App应该连续运行并跟踪GPS。基于位置的服务在后台运行永远

问题:我已经差不多完成了这个项目,但是我想运行这个应用程序FOREVER来跟踪,我是通过GPS来做这件事的,当我在设置时间和距离之后最小化应用程序时,我的应用程序将会关闭。将在FOREGROUND中完美运作。

请给我建议这是什么可能的解决方案。

回答

1

首先,您想要在Service中进行跟踪,而不是在活动本身中,因此即使用户未与其交互,该应用也会执行该操作。

然后AlarmManager是你在找什么。您可以安排在特定时间调用意向。因此,您可以检查您的服务是否仍在运行,如果没有重新启动它以重新开始跟踪。

从这个应用程序看看UpdateService

Intent i = new Intent(UPDATE_ACTION); 
PendingIntent alarmManagerPendingIntent = PendingIntent.getBroadcast(this, 0, i, 0); 

mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime(), //Start now 
       10*60*1000, //every 10 minutes 
       alarmManagerPendingIntent); 
+0

http://pastie.org/6192104看看我的代码here..I已经使用服务,但即时通讯没有得到确切位置使用alarammanager ..我只是试图打印在onDestroy中发送消息,但在Android操作系统正在查杀时此方法未运行应用程序 – krish 2013-02-16 05:37:43

+0

我没有看到您的服务。这只是活动。但是你希望你所有的更新工作都在你的服务中。所以即使活动已关闭,您也可以运行它。 – n3utrino 2013-02-16 05:43:02

0

您需要使用服务,而不是您的常规应用程序。即使应用程序关闭,服务也可以运行。你不能运行服务“永远”,除此之外你总是可以去手动停止服务。为了服务生存更长时间,它必须是一个前台服务 - 更多在这里:Running a Service in the Foreground

+0

startForeground()没有运行在按钮上我们shd使用这个确切的地方? – krish 2013-02-16 05:42:23

0

最简单的方法是

@Override 
public void onDestroy() { 
    Intent serviceIntent = new Intent(getApplicationContext(), UpdateLocationService.class); 
    getApplicationContext().startService(serviceIntent); 
}