2

我一直在寻找如何实现一种在 Android 中获取用户位置的方法,我遇到了这个 SO 问题: 在 Android 上获取用户当前位置的最简单、最可靠的方法是什么?

我的问题是,LocationResult 是什么?我将如何使用它?我在那个问题中构建了一个类似的应用程序,我根据当前位置搜索附近的地方。我正在考虑有一个单独的类来轮询位置更改,这样我就不必在不同的活动中重复代码。我怀疑 LocationResult 是为了这个目的?您能否向我展示如何在 OnCreate() 方法的 2 个活动中使用它的示例?

4

2 回答 2

0

乔纳森,

LocationResult 是一种检索要处理的数据的简单方法。它是一个抽象类,您可以在其中实现子类以使用数据。参见抽象类概念

于 2014-10-02T13:18:35.637 回答
0

这就是您需要的代码:

    protected LocationCallback mLocationCallback = new LocationCallback()
{
    @Override
    public void onLocationAvailability(LocationAvailability locationAvailability) {
        super.onLocationAvailability(locationAvailability);
        if(!locationAvailability.isLocationAvailable())
        {// No location available
            checkLocationSettings();
            Snackbar snackLocationUnavailable = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.location_unavailable, Snackbar.LENGTH_LONG);
            snackLocationUnavailable.show();
        }
        else
        {
            Snackbar snackLocationAvailable = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.location_available, Snackbar.LENGTH_LONG);
            snackLocationAvailable.show();
        }
}

    @Override
    public void onLocationResult(LocationResult locationResult) {
        super.onLocationResult(locationResult); 
        mLastLocation = locationResult.getLastLocation();
        mMyLatLng = new LatLng(valueOf(mLastLocation.getLatitude()), valueOf(mLastLocation.getLongitude()));
        meMarker.setPosition(mMyLatLng);
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mMyLatLng, 15));
        Snackbar snak2 = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.location_updated, Snackbar.LENGTH_INDEFINITE);
        snak2.show();
    }
};

...

onCreate(){
// Build GoogleApiClient
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();

//`Build LocationRequest
        mLocationRequest = LocationRequest.create()
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setInterval(2000)        // 2 seconds, in milliseconds
                .setFastestInterval(1000); // 1 second, in milliseconds
`
//     

Build LocationSettingsRequest
        LocationSettingsRequest.Builder lRbuilder = new LocationSettingsRequest.Builder();
        lRbuilder.addLocationRequest(mLocationRequest);
        mLocationSettingsRequest = lRbuilder.build();
        lRbuilder.setAlwaysShow(true);

// ...

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationCallback, null);

//...

 LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, mLocationCallback);
于 2016-08-06T09:05:11.290 回答