2017-10-03 10 views
1

私はFusedLocationApiを使用していましたが、使用されなくなったことを知りました(下記参照)。実装が簡単でした。ドキュメントはあなたが私が最近FusedLocationProviderClientに変更GoogleApiClientFusedLocationProviderClientいつ、どのようにLooperを停止するのですか?

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ため

使用メンバ変数:

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); 
    } 
} 
+0

これは、今のおかげ明らかです! – portfoliobuilder

関連する問題