2016-04-29 58 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'广播位置更新是一个很好的解决方案吗?或者有更好的方法。人们似乎反对为此使用“单身”。我需要在应用程序打开的整个过程中广播更新。 –