2016-04-29 5 views
0

私はAndroidプロジェクトでlocation updatesを取得するためにsingletonを持っています。 これは、gettersを使用して必要な値を取得したいときにうまく動作します。アクティビティのロケーション更新のためのAndroid登録

ただし、私のactivitiesのうちの1つについては、発生したときに位置の更新を取得する必要があります。とにかくsingletonに「タップ」して位置の更新を取得し、activityの中に必要なときに処理しますか?または、場所が更新されたbroadcastにはいくらかであり、iOSと同様の更新がbroadcastに登録されていますか?

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

シングルトンは、さまざまな理由から本当に悪い考えです。なぜあなたは 'Service'を使って位置更新を聞かないのですか?それははるかに良い解決策になります。場所の更新情報を正確に入力すれば、どういう意味でしょうか? 'Activity'が開いている限り、位置更新を聞きたいですか?もしそうなら、これをあなたの 'Activity'に直接実装するほうがはるかに優れています。 –

+0

私はアプリケーションコンテキストを渡しています。たぶん、シングルトンは最善のアイデアではないかもしれませんが、私は、アプリケーションが開いている間(シングルトンはそれを保存する)に位置データを収集する方法を望んでいました。地図。 –

+1

それはまさに 'LocationManager'がすでにあなたのためにしていることです。 UIから独立した位置更新を実際に聞きたい場合は、 'Service'を使用してください。 –

答えて

1

、すなわちで:)ところで、あなたのLocationSingleton(悪い名前を拡張するシングルトンに「タップ」する方法があります:ここで

は、私は私のシングルトンのために持っているものです外部のコードは、ライブアップデートが必要なときにフックすることができます。新しい場所を受け取ったら、あなたはリスナーに電話するだけです。代わりに(恐らく クリーナーで、あなたが書き込むコードが少なくて済みます)、イベントバス(OTTO、GreenRobot'sなど)を使用することになります。 LocationSingletonは、各ロケーションのアップデートでイベントを発行します。他のコードがそれについて知りたいのであれば、それは特定のイベントのためにバスに登録するだけで、それはほとんどそれです。わからない場合は、 にイベントバスソリューションをご利用ください。

+0

'イベントバス 'を使って位置情報をブロードキャストする' singleton'は良い解決策でしょうか?それとも良い方法がありますか?人々はこのために「シングルトン」を使うことに反対しているようです。私は、アプリが開いている間、更新をブロードキャストする必要があります。 –

関連する問題