2011-08-26 70 views
0

我正在尝试制作一个应用程序,该程序会每x分钟将您的gps位置发送到网络服务器。我很困惑我应该如何做到这一点。我是否使用计时器或其他服务每x分钟调用get gps函数?如何在后台每隔30分钟获取gps位置

这是我使用来获取GPS信号

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
       Criteria criteria = new Criteria(); 
       criteria.setAccuracy(Criteria.ACCURACY_FINE); 
       String bestProvider = locationManager.getBestProvider(criteria, 
         false); 
       LocationListener loc_listener = new LocationListener() { 

        @Override 
        public void onStatusChanged(String provider, int status, 
          Bundle extras) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void onProviderEnabled(String provider) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void onProviderDisabled(String provider) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void onLocationChanged(Location location) { 
         // TODO Auto-generated method stub 

        } 
       }; 
       try { 
        Looper.prepare(); 
        locationManager.requestLocationUpdates(bestProvider, 0, 0, 
          loc_listener); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       Location location = locationManager 
         .getLastKnownLocation(bestProvider); 

回答

2

一个alarm是完美的。您可以让您的应用程序请求系统每30分钟(每次手动或使用setRepeating()方法)手动设置警报。无论您的应用程序是否正在运行,此警报都会关闭。您需要一个广播接收器来处理它生成的意图。有关于报警here的很好的教程。

+0

我有一个称为更新位置的函数。它实际上是一个异步任务,我使用updateLocation()。execute();我应该在我的第一个活动的oncreate方法中设置一个警报,并从那里调用updateLocation()。execute()?因为这个例子讨论了开始一个新的活动 – Sean

1

你应该注册到AlarmManger开始你的IntentService将得到的位置并将其发送到服务器。

在服务执行结束时,将当前时间设置为30分钟的新警报。

+0

如果我在我的启动页面中开始报警,并且它会从当前时间调用30分钟,如果关闭该应用并再次打开启动页面,会发生什么情况?定时器重新启动还是现在有两个闹钟? – Sean