2013-05-14 107 views
0

我正在研究一個必須在後臺工作並將位置更新發送到服務器的應用程序。服務停止更新位置

該代碼非常簡單,正常工作。有一種服務具有一個Timer,它每15秒向服務器發送一次更新,並且還實現LocationListener接口。

我不認爲讓所有的代碼將是有益的,這裏是我如何設置類:

@Override 
public void onCreate() { 
    super.onCreate(); 

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER   , 5000, 10.0f, this); 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER , 5000, 10.0f, this); 

    //Ping Task sends updates to the Server 
    Ping_Timer.scheduleAtFixedRate(new Ping_Task(), 5000, Ping_Task.TIME_GET_JOBS*1000); 
} 

在實踐中我有一些問題,我的代碼。服務應該在後臺運行,即使Service stop在那裏有一個GCM系統可以在後臺重新啓動服務。

即使有了這些保護措施,我仍然有問題,有時應用程序不再更新位置,即使明確表示服務仍在運行。在Google地圖應用程序中,我可以看到該位置在那裏是正確的,但在我的應用程序中沒有。這怎麼可能,爲什麼我不再獲得'onLocationChanged'事件。

感謝您的幫助。

回答

2

首先,我不確定Service的生命週期。但我使用onStart()方法的Service下面的代碼。在Context上調用startService(Intent)方法後調用此方法。我想,你可以在onCreate()方法中做到這一點。

實現位置監聽器:

private final static LocationListener listener = new LocationListener() { 

    @Override 
    public void onLocationChanged(Location location) { 
     //locationHandler will be created below. 
     Message.obtain(locationHandler, 0, location.getLatitude() + ", " + location.getLongitude()).sendToTarget(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
}; 

給你的聽衆的方法,而不是this

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10.0f, listener); 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 10.0f, listener); 

onStart()方法Service實現這個監聽器的處理程序。

Handler locationHandler = new Handler() { 
    @Override 
    public void handleMessage(android.os.Message msg) { 
     String location = (String) msg.obj; 

     //do what you wanna do with this location 

    } 
} 

這就是我的做法。

+0

這是一項服務。 – nickik 2013-05-15 13:47:28

+0

更新了我的答案。一探究竟。 – slhddn 2013-05-15 14:11:45

+0

爲什麼我要繞過android.os.Message?我可以直接在LocationListener中做我所做的事情。 – nickik 2013-05-21 17:25:59

相關問題