당신은 당신의 활동의 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);
}
}
, 감사합니다! – portfoliobuilder