2016-04-29 26 views
0

我有一個singleton在我的Android項目中檢索location updates。 這適用於當我想使用getters來獲得我需要的值的情況。Android註冊在活動中的位置更新

但是,對於我的其中一個activities,我需要在發生位置更新時檢索它。反正有「點擊」進入singleton檢索位置更新,並根據我需要在activity內處理它們?或者是有一些broadcast位置已更新,並註冊爲broadcast更新類似於我會做的iOS

這裏是我有我的單身:

public class LocationSingleton implements LocationListener { 
    //Instance 
    private static LocationSingleton mInstance = null; 
    private static Context appContext; 

    private LocationSingleton(Context context) { 
     LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, MINIMUM_DISTANCE, this); 
    } 

    public static LocationSingleton getInstance(Context context) { 
     if (mInstance == null) { 
      appContext = context.getApplicationContext(); 
      mInstance = new LocationSingleton(appContext); 
     } 

     return mInstance; 
    } 


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

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     Log.d("Location", "Provider disabled"); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Log.d("Location", "Provider enabled"); 
    } 

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

這樣的單身人士由於各種原因是一個非常糟糕的主意。你爲什麼不使用'服務'來偵聽位置更新?這將是一個更好的解決方案。點擊位置更新意味着什麼?只要您的「活動」處於打開狀態,您是否想要收聽位置更新?如果是的話,那麼直接在你的'活動'中實現這一點會更好。 –

+0

我正在傳遞應用程序上下文。也許單身並不是最好的主意,但我想要一種方式來收集整個應用程序打開時的位置數據(Singleton會存儲它),並且可以選擇在特定活動中偵聽位置更新以更新用戶地圖。 –

+1

這正是'LocationManager'已經爲你做的。如果您真的想要獨立於任何用戶界面來監聽位置更新,請使用「服務」。 –

回答

1

有什麼辦法,以 「龍頭」 入單

擴展您的LocationSingleton(壞名BTW :)與IE監聽器,因此任何外部代碼都可以在需要實時更新時掛鉤。當你收到新的位置時,你只需要打電話給你的聽衆。或者(這可能是 更清潔,並需要更少的代碼來寫你)將使用事件總線(如OTTO,GreenRobot的)。然後您的LocationSingleton會在每個位置更新上發出事件。如果任何其他代碼想知道這一點,它只是訂閱特定事件的公共汽車,這主要是它。如果不確定,請使用Event Bus解決方案進行 。

+0

使用'event bus'保持'singleton'廣播位置更新是一個很好的解決方案嗎?或者有更好的方法。人們似乎反對爲此使用「單身」。我需要在應用程序打開的整個過程中廣播更新。 –