3

FusedLocation Provider APIを使用してユーザーの現在の場所を取得しました。ユーザーが場所をオンにすると、うまく機能します。

しかし、ユーザーが位置情報をオフにしている場合は、ユーザーにメッセージを提供したいと考えています。位置情報がオフになっている場合、はメソッドrequestLocationUpdatesを呼び出しません。onLocationChangedこれは予想されることかもしれませんが、場所をキャプチャしてユーザーに通知できるように、場所がオフになっているときに何が呼び出されるかを知りたいです。以下は私が使用しているコードです(リンクが失われたStackoverflowの例から選択しました)。

public class FusedLocationService implements
    LocationListener,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener {

private static final String TAG = "FusedLocationService";

private static final long INTERVAL = 1000 * 30;
private static final long FASTEST_INTERVAL = 1000 * 5;
private static final long ONE_MIN = 1000 * 60;
private static final long REFRESH_TIME = ONE_MIN * 5;
private static final float MINIMUM_ACCURACY = 50.0f;
Activity locationActivity;
private LocationRequest locationRequest;
private GoogleApiClient googleApiClient;
private Location location;
private FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi;

FusedLocationReceiver locationReceiver = null;

public FusedLocationService(Activity locationActivity, FusedLocationReceiver locationReceiver) {
    this.locationReceiver = locationReceiver;
    locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(INTERVAL);
    locationRequest.setFastestInterval(FASTEST_INTERVAL);
    this.locationActivity = locationActivity;

    googleApiClient = new GoogleApiClient.Builder(locationActivity)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    if (googleApiClient != null) {
        googleApiClient.connect();
    }
}

@Override
public void onConnected(Bundle connectionHint) {
    Log.i(TAG, "I'm connected now");
    Location currentLocation = fusedLocationProviderApi.getLastLocation(googleApiClient);
    if (currentLocation != null && currentLocation.getTime() > REFRESH_TIME) {
        location = currentLocation;
    } else {
        fusedLocationProviderApi.requestLocationUpdates(googleApiClient, locationRequest, this);
        // Schedule a Thread to unregister location listeners
        Executors.newScheduledThreadPool(1).schedule(new Runnable() {
            @Override
            public void run() {
                fusedLocationProviderApi.removeLocationUpdates(googleApiClient,
                        FusedLocationService.this);
            }
        }, ONE_MIN, TimeUnit.MILLISECONDS);
    }
}

@Override
public void onLocationChanged(Location location) {
    Log.i(TAG, "Location is changed!");
    //if the existing location is empty or
    //the current location accuracy is greater than existing accuracy
    //then store the current location
    if (null == this.location || location.getAccuracy() < this.location.getAccuracy()) {
        this.location = location;
// let's inform my client class through the receiver
        locationReceiver.onLocationChanged();
        //if the accuracy is not better, remove all location updates for this listener
        if (this.location.getAccuracy() < MINIMUM_ACCURACY) {
            fusedLocationProviderApi.removeLocationUpdates(googleApiClient, this);
        }
    }
}

public Location getLocation() {
    return this.location;
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

   }

}
4

2 に答える 2

1

LocationManagerこの質問ごとに使用できると思います:位置情報サービスが有効になっているかどうかを確認するには?

于 2015-05-27T04:21:35.840 に答える