2012-04-25 85 views
2

我得到了一個任務。
安卓日程安排任務

6:00 register locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       0, 0, locationListener);<br> 
19:00 unregister locationManager.removeUpdates(locationListener); 

首先,我想使用的服務,與AlarmManager。但我無法將locationManagerlocationListener從活動發送到服務。

最後,我用AsyncTask創建一個循環,在doInbackground中一直運行。如果時間是6:00或19:00,則註冊或取消註冊locationManager。

protected Object doInBackground(Object... params) { 
    Calendar calendar = Calendar.getInstance(); 
    while(flag) { 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, 19); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 

     long now = System.currentTimeMillis(); 
     if(calendar.getTime().getTime() - now < 1000) { 
      publishProgress(new Message(Message.REMOVE_LOCATION_MANAGER)); 
     } 

     calendar.set(Calendar.HOUR_OF_DAY, 6); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 
     now = System.currentTimeMillis(); 
     if(calendar.getTime().getTime() - now < 1000) { 
      publishProgress(new Message(Message.REGISTER_LOCATION_MANAGER)); 
     } 
    } 
    return null; 
} 
protected void onProgressUpdate(Object... values) { 
    super.onProgressUpdate(values); 

    Message msg = (Message)values[0]; 
    if(msg.type == Message.REMOVE_LOCATION_MANAGER) { 
     lm.removeUpdates(ll); 
     Toast.makeText(context, "remove locationManager", Toast.LENGTH_SHORT).show(); 
    } 

    if(msg.type == Message.REGISTER_LOCATION_MANAGER) { 
     lm.removeUpdates(ll); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       0, 0, ll); 
     Toast.makeText(context, "register locationManager", Toast.LENGTH_SHORT).show(); 
    } 
} 

任何人都有更好的日程安排方法,thx提前。

回答

-1

沒有必要直接回答您的問題,而且您肯定需要重新考慮您的應用程序,因爲從6AM到19PM運行GPS時,沒有任何Android設備可以在單電池充電的情況下繼續工作。

基本上你只有在你確實需要GPS位置更新時才需要更新。這裏有一篇由Android Guru Reto Meyer撰寫的關於獲取位置更新的好文章:http://android-developers.blogspot.jp/2011/06/deep-dive-into-location.html