2014-05-23 3 views
0

첫 번째 앱에서 작업하고 있는데이 앱에는 주 활동과 두 번째 활동 인 2 가지 활동이 있습니다. 모두 활동 (내가 편집에 "인터넷"클래스가 있습니다) 그래서 나는이 같은 클래스를 생성 알고 사용자 위치가 필요합니다앱이 열려있을 때 LocationListener 사용 [Android]

그때 내가 stopUsingGPS를 사용에서 onCreate 이벤트 GPSTracker를 기반으로 객체를 생성의 주요 활동에
public class GPSTracker extends Service implements LocationListener { 

private final Context mContext; 

// flag for GPS status 
boolean isGPSEnabled = false; 

// flag for network status 
boolean isNetworkEnabled = false; 

// flag for GPS status 
boolean canGetLocation = false; 

boolean GPSForce = false; 

Location location; // location 
double latitude; // latitude 
double longitude; // longitude 

private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

protected LocationManager locationManager; 

public GPSTracker(Context context, Boolean forcegps) { 
    this.mContext = context; 
    this.GPSForce = forcegps; 
    getLocation(); 
} 

public Location getLocation() { 
... 
} 

public void startUsingGPS(){ 
    getLocation(); 
} 

public void stopUsingGPS(){ 
    if(locationManager != null){ 
     locationManager.removeUpdates(GPSTracker.this); 
    } 

    canGetLocation = false; 
} 

public double getLatitude(){ 
    if(location != null){ 
     latitude = location.getLatitude(); 
    } 

    return latitude; 
} 

public double getLongitude(){ 
    if(location != null){ 
     longitude = location.getLongitude(); 
    } 

    return longitude; 
} 

public boolean canGetLocation() { 
    return this.canGetLocation; 
} 

public void showSettingsAlert(){ 
... 
} 

@Override 
public void onLocationChanged(Location location) { 
    if (location != null) { 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
    } 
} 

@Override 
public void onProviderDisabled(String provider) { 
} 

@Override 
public void onProviderEnabled(String provider) { 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
} 

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

() onStop 이벤트에서 사용자가 애플리케이션을 닫을 때 GPS를 중지하고 GPS 사용을 다시 시작하기 위해 onResume 이벤트에서 GPS를 시작()합니다.

내 문제는 두 번째 활동에도 GPS 추적기를 사용해야하지만 두 번째 활동이 열리면 두 번째 활동이 열려 GPS가 중지됩니다 (onStop 이벤트는 두 번째 활동이 사용자가 애플리케이션에서 나가면 열리지 않을 때도 호출됩니다).

내 접근 방식이 잘못되었다고 생각합니다.

GPSTracker 객체를 만들고이 작업을 수행하려면 어떻게해야합니까? - 사용자가 응용 프로그램을 종료 할 때만 GPS 사용을 중지합니다. - 필요한 모든 활동에서 사용하십시오.

나는 활동에서 좌표를 변경하고 싶습니다. 그러나 어떻게 할 수 있을지 모르겠습니다.

답변

0

mainActivity의 onDestroy에서 stopUsingGPS()를 호출해야합니다. 따라서 사용자가 앱을 완전히 종료하면 GPS 추적 만 중단됩니다. 활동이 일시 중지 될 때마다 onStop이 호출됩니다. 그러므로 mainActivity의 onDestroy에서 stopUsingGPS() 메소드를 호출하십시오.

+0

방금 ​​시도했지만 사용자가 앱을 닫을 때 onDestroy가 항상 호출되는 것은 아닙니다. 이 사이트에서 많은 질문을 찾을 수 있습니다. – Martin

+0

onDestroy는 앱 기반이 아닌 활동 단위별로 호출됩니다. 사용자가 특정 활동의 버튼을 누르면 해당 활동의 onDestroy가 호출됩니다. –

+0

이 튜토리얼에서와 같이 IBinder 클래스를 사용하는 것이 가장 좋습니다. http://dharmendra4android.blogspot.it/2012/05/bind-service-using-ibinder-class.html – Martin

관련 문제