2012-03-29 83 views
4

我想要做的是:服務,不斷地收聽gps(是:只需 gps)位置更新而不主動請求它們 - 即這個應用程序應該消耗在電池壽命或cpu時間方面沒有其他資源,直到其他應用程序請求/接收gps位置更新。那麼我的應用程序應該執行一些功能。在此之後,它應該回到「睡眠」,等待下一個GPS定位被其他應用程序請求...android:listen *被動地* gps位置更新

我已經閱讀了這篇文章http://android-developers.blogspot.de/2011/06/deep-dive-into-location.html但這似乎有不同的重點。實際上,我在這裏迷路了......如何準確地使用這個被動位置提供者?我不能得到這個工作:(

到目前爲止我的代碼:我有這樣的(遠程)服務註冊位置監聽器:

public class MyService extends Service 
{ 
    LocationManager locationManager; 

    @Override 
    public IBinder onBind(Intent intent) 
    { 
     return serviceBinder; 
    } 

    private final IMyService.Stub serviceBinder = new IMyService.Stub() 
    {}; 

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

     Log.d(Config.LOGTAG, "service started"); 

     locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, new GPSLocationListener()); 
    } 

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

     Log.d(Config.LOGTAG, "service destroyed"); 
    } 

    public class GPSLocationListener implements LocationListener 
    { 
     @Override 
     public void onLocationChanged(Location location) 
     { 
      Toast.makeText(getBaseContext(), "GPS FIX RECEIVED: " + location.getLongitude() + " : " + location.getLatitude(), Toast.LENGTH_LONG).show(); 
      Log.d(Config.LOGTAG, "GPS FIX RECEIVED: " + location.getLongitude() + " : " + location.getLatitude()); 
     } 

     @Override 
     public void onProviderDisabled(String arg0) 
     { 
      Log.d(Config.LOGTAG, ":("); 
     } 

     @Override 
     public void onProviderEnabled(String arg0) 
     { 
      Log.d(Config.LOGTAG, ":)"); 
     } 

     @Override 
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) 
     { 
      Log.d(Config.LOGTAG, ":/"); 
     } 
    } 
} 

不幸的是,這是不是在所有:( 服務工作根據日誌開始,但是當我如開放的谷歌地圖與GPS功能,並得到一個位置固定在那裏,位置監聽器是不是「通知」(即不記錄任何東西)

如何做到這一點嗎?

+1

這可能是Google地圖不會更新被動提供商。類似(重複?)問題在這裏:http://stackoverflow.com/q/9620107/324625 – 2012-03-29 15:09:35

+0

@xenonite你有沒有想過這個問題想通了?我正在做類似的工作 – uofc 2014-04-10 00:33:29

回答

1

我想知道w不管它是不是工作,因爲沒有被動的地點正在收到,或代碼無法正常工作。所以我要做的第一件事就是開始聆聽網絡和GPS位置(用於測試)並確保它們到達。如果他們這樣做,那麼這表明谷歌地圖正在使用緩存的位置,而不是煽動被動的位置廣播。

如果你沒有得到任何位置,你需要檢查你的代碼,並使其與GPS /網絡一起工作,然後再進入被動位置。

1

嘿,我認爲你需要更新的經度和緯度值。

請點擊此鏈接.. Click here

我已經嘗試過了,在Android手機。它的工作進行測試。

注意: 必須和應該測試Android手機上的GPS狀態。 它不會在eclipse模擬器上顯示。但它會顯示在手機上試試..

有一個不錯的。

+0

這不能回答OP的問題。他希望在應用程序關閉時被動地收集數據。只有在應用程序打開時纔有效 – 2016-12-24 15:06:20