あなたは自分の活動のonPause()
にmFusedLocationClient.removeLocationUpdates(mLocationCallback)
を呼び出す必要があります。しかし、それだけではありません。あなたの主な活動でFusedLocationProviderClient、GoogleApiClient、となLocationRequestため
使用メンバ変数:
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ためのメンバ変数を使用します。
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
を割り当てます:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
//...............
}
onResume()
で、GoogleApiClientとFusedLocationProviderClientが設定されている場合は、それらを使用します。それ以外の場合は、活動が開始されたのは今回が初めてですので、GoogleApiClientを接続します
@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()
を呼び出す:
@Override
public void onPause() {
super.onPause();
if (mFusedLocationClient != null) {
mFusedLocationClient.removeLocationUpdates(mLocationCallback);
}
}
これは、今のおかげ明らかです! – portfoliobuilder