首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在我们行走时获得实时当前位置更新

如何在我们行走时获得实时当前位置更新
EN

Stack Overflow用户
提问于 2017-07-09 18:35:22
回答 1查看 733关注 0票数 0

我想讨论在我们移动时是否有可能获得实时的当前位置更新,我尝试使用FusedLocationProviderClient每2分钟请求一次当前位置更新

我们可以做什么来实现这一点,实现detectActivity的步行和请求当前位置更新每2分钟或更短的时间?

或者在FusedLocationProviderClient中有位置改变监听器的事情?这样我们就可以监听位置是否有变化,并在应用程序中实时延迟并在文本视图中显示?位置更改侦听器在GoogleMap对象上可用,但不建议现在使用,对吗?

或者我应该坚持FusedLocationProviderClient的请求更新?

事前谢谢

同时告诉我,如果我把手机从一个房间移到另一个房间,延迟时间会有变化吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-09 18:52:43

您可以使用我创建的这个类:

代码语言:javascript
复制
public class LocationFetcher implements com.google.android.gms.location.LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
public GoogleApiClient googleApiClient;
Context context;
private LocationRequest locationRequest;

public LocationFetcher(Context context) {
    this.context = context;
    googleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    locationRequest = new LocationRequest();


}

public void connectGps() {
    googleApiClient.connect();
}

public void requestLocationUpdate() {
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 100);
    } else {
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
     //Getting location every 3 seconds. You can change this.
            locationRequest.setInterval(3000);
            locationRequest.setFastestInterval(3000);


        LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
    }
}

public boolean isConnected() {
    return googleApiClient.isConnected();
}

@Override
public void onLocationChanged(Location location) {
//You will get location updates here.
}


@Override
public void onConnected(@Nullable Bundle bundle) {

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);

    builder.setAlwaysShow(true);
    PendingResult result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());

    if (result != null) {
        result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(LocationSettingsResult locationSettingsResult) {
                final Status status = locationSettingsResult.getStatus();
                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        requestLocationUpdate();
                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        try {
                            if (status.hasResolution()) {
                                status.startResolutionForResult((Activity) context, 1000);
                            }
                        } catch (IntentSender.SendIntentException e) {
                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        break;
                }
            }
        });
    }

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    DialogPopup.getInstance().showLocationSettingsAlert(context);
}

public void removeLocationUpdates() {
   if (googleApiClient.isConnected()){
       LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, this);
   }
}

public void disconnectGps() {
    googleApiClient.disconnect();
}


}

在您活动的onStart中,调用以下代码:

代码语言:javascript
复制
LocationFetcher locationFetcher = new LocationFetcher(this);
locationFetcher.connectGps();

在onStop中使用以下代码:

代码语言:javascript
复制
locationFetcher.disconnectGps();

您将在类的onLocationChangedMethod中获得位置更新。

您还必须添加此依赖项:

代码语言:javascript
复制
compile 'com.google.android.gms:play-services-location:10.2.1'

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44995445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档