2017-10-03 5 views
1

필자는 FusedLocationApi가 더 이상 사용되지 않는다는 것을 알게 될 때까지 사용했습니다 (아래 참고 자료 참조). 구현이 간단했습니다. 문서가 당신은 내가 최근에 FusedLocationProviderClient로 변경 GoogleApiClientFusedLocationProviderClient 언제 루퍼를 멈출 수 있습니까?

LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, 
         locationRequest, this); 

와 함께 사용할 필요가 말했듯이 나는 성공적으로 FusedLocationProviderClient 작업 얻을 수있었습니다 튜토리얼에 따라 (아래 참고 참조)

자습서 : https://github.com/codepath/android_guides/wiki/Retrieving-Location-with-LocationServices-API

// new Google API SDK v11 uses getFusedLocationProviderClient(this) 
getFusedLocationProviderClient(this).requestLocationUpdates(mLocationRequest, new LocationCallback() { 
     @Override 
     public void onLocationResult(LocationResult locationResult) { 
     // do work here 
     onLocationChanged(locationResult.getLastLocation(); 
     } 
    }, 
    Looper.myLooper()); 

내가 겪고있는 문제는 루퍼 스레드입니다. 백그라운드에서 응용 프로그램을 사용하더라도 루퍼 스레드는 계속 실행됩니다. 응용 프로그램이 백그라운드에있을 때 위치 업데이트를 일시 중지 한 다음 응용 프로그램이 포 그라운드에있을 때 위치 업데이트를 다시 시작하고 싶습니다. 이것을 어떻게 할 수 있습니까?

참고 문헌 :

  1. https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi
  2. https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient

답변

5

당신은 당신의 활동의 onPause()mFusedLocationClient.removeLocationUpdates(mLocationCallback)를 호출해야합니다. 그러나, 그것보다 조금 더 있습니다.

주요 활동에 FusedLocationProviderClient, GoogleApiClient 및 LocationRequest에 대한

를 사용하여 멤버 변수 : 다음

LocationCallback mLocationCallback = new LocationCallback(){ 
    @Override 
    public void onLocationResult(LocationResult locationResult) { 
     for (Location location : locationResult.getLocations()) { 
      Log.i("MainActivity", "Location: " + location.getLatitude() + " " + location.getLongitude()); 

     } 
    }; 

}; 

onCreate()mFusedLocationClient를 할당 :

import com.google.android.gms.location.FusedLocationProviderClient; 
import com.google.android.gms.location.LocationCallback; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationResult; 

public class MainActivity extends AppCompatActivity 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    FusedLocationProviderClient mFusedLocationClient; 
    GoogleApiClient mGoogleApiClient; 
    LocationRequest mLocationRequest; 

    //.......... 

뿐만 아니라 LocationCallback의 멤버 변수를 사용 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); 

    //............... 
} 

그런 다음 onResume()에서 GoogleApiClient 및 FusedLocationProviderClient가 설정된 경우 사용합니다.

@Override 
public void onResume() { 
    if (mGoogleApiClient != null && mFusedLocationClient != null) { 
     requestLocationUpdates(); 
    } else { 
     buildGoogleApiClient(); 
    } 
} 

protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 
    mGoogleApiClient.connect(); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    requestLocationUpdates() 
} 

public void requestLocationUpdates() { 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(120000); // two minute interval 
    mLocationRequest.setFastestInterval(120000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper()); 
    } 
} 

을 그리고 마지막으로, onPause()에, removeLocationUpdates() 전화 : 그렇지 않으면,이 활동이 시작되었습니다 처음이다, 그래서 GoogleApiClient 연결이 지금은 분명하다

@Override 
public void onPause() { 
    super.onPause(); 
    if (mFusedLocationClient != null) { 
     mFusedLocationClient.removeLocationUpdates(mLocationCallback); 
    } 
} 
+0

, 감사합니다! – portfoliobuilder