2011-06-18 19 views
1

アプリ全体で更新された場所が必要です。私はすべての私の活動の中に下記のコードを追加することでそうしようとしています。私の問題は、ユーザーがアップデートを取得するのに十分な長さの1つのアクティビティにとどまることを確認できないことです。どのようにして、一定の時間ごと(たとえば30分)に更新されたポジションを達成するために、アプリケーション側のリスナーを持つことができますか?アプリ全体で更新された場所を取得する

private LocationManager mLocationManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    // My activity stuff 
}  

private Location getBestLocation(LocationManager locationManager) { 

    Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

    // If both are available, get the most recent 
    if(location_gps!=null && location_network !=null) { 
     return (location_gps.getTime() > location_network.getTime())?location_gps:location_network; 
    } 
    else if(location_gps==null && location_network ==null){ 
     return null; 
    } 
    else 
     return (location_gps==null)?location_network:location_gps; 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    // Request location updates at startup 
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_UPDATE_MIN_TIME, LOCATION_UPDATE_MIN_DIST, this); 
    mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, LOCATION_UPDATE_MIN_TIME, LOCATION_UPDATE_MIN_DIST, this); 
    getBestLocation(mLocationManager) 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    // Remove the locationlistener updates when Activity is paused 
    mLocationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 
    GlobalVars.lat = (Double) (location.getLatitude()); 
    GlobalVars.lng = (Double) (location.getLongitude()); 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // Nothing here 

} 

@Override 
public void onProviderEnabled(String provider) { 
    Location location = getBestLocation(mLocationManager); 
    // Initialize the location fields 
    if (location != null) {    
     GlobalVars.lat = (Double) (location.getLatitude()); 
     GlobalVars.lng = (Double) (location.getLongitude());      
    } 
} 

@Override 
public void onProviderDisabled(String provider) {   
} 

答えて

1

さらに調査したところ、サービスを使い終わった。

public class LocationService extends Service implements LocationListener { 

    LocationManager locationManager; 

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

    @Override 
    public void onCreate() { 

     locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

     Location loc = getBestLocation(locationManager); 
     GlobalVars.lat = (Double) (loc.getLatitude()); 
     GlobalVars.lng = (Double) (loc.getLongitude()); 

    } 

    public void onLocationChanged(Location loc) {   
     GlobalVars.lat = (Double) (loc.getLatitude()); 
     GlobalVars.lng = (Double) (loc.getLongitude());  
    } 

    public static Location getBestLocation(LocationManager locationManager) { 

     Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

     // If both are available, get the most recent 
     if(location_gps!=null && location_network !=null) { 
      return (location_gps.getTime() > location_network.getTime())?location_gps:location_network; 
     } 
     else if(location_gps==null && location_network ==null){ 
      return null; 
     } 
     else 
      return (location_gps==null)?location_network:location_gps; 

    } 

    public void onProviderEnabled(String s){} 
    public void onProviderDisabled(String s){} 
    public void onStatusChanged(String s, int i, Bundle b){} 

    @Override 
    public void onDestroy() {  
     locationManager.removeUpdates(this); 
    } 
} 
0

すべてのAndroidアプリケーションには1つのアプリケーション(またはサブクラス)があり、アプリケーション全体の機能を提供するためにデフォルトを無効にすることができます。単にandroid.app.Applicationをサブクラス化して追加機能を追加し、マニフェストでアプリケーションを宣言してください。マニフェストの<アプリケーション>ノードで、オーバーライドのフルネームに等しいアンドロイド:名前属性を指定します。

これを取得したら、それに静的なアクセス方法を与えるのは簡単です。

関連する問題