首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位置传感器有时会返回相同的位置

位置传感器有时会返回相同的位置
EN

Stack Overflow用户
提问于 2018-05-11 11:54:29
回答 1查看 135关注 0票数 0

我在我的一个设备上遇到了一个奇怪的问题,我使用谷歌融合定位API创建了一个后台服务,它工作得很完美,但在我的一个设备上,它有时工作得很好,但有时它会长时间地返回相同的信息--因为我添加了特定的位移,所以位置永远不会更新。我所做的解决方法是:关闭位置传感器,然后再打开它,它会再次开始发送位置更新。

你知道为什么会发生这种事吗?

手机是Qmobile S4 - android 6.0

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-05-11 12:38:13

希望这能对你有所帮助!声明一些最终变量,如下所示

代码语言:javascript
复制
private final int LOCATION_INTERVAL = 3000;
private final int FAST_LOCATION_INTERVAL = 1500;
private final int MAX_WAIT_TIME = 5 * 1000;
private final float SMALLEST_DISPLACEMENT = 10;
private final float TWO_MINUTES = 1000 * 60 * 2;

并将它们分配给您的位置请求

代码语言:javascript
复制
locationRequest = LocationRequest.create();
locationRequest.setInterval(LOCATION_INTERVAL);
locationRequest.setFastestInterval(FAST_LOCATION_INTERVAL);
locationRequest.setSmallestDisplacement(SMALLEST_DISPLACEMENT);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setMaxWaitTime(MAX_WAIT_TIME);

如果权限可用,则连接您的融合位置提供商

代码语言:javascript
复制
 public void connect() {
    if (fusedLocationProviderClient != null) {
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, null);
        //onLocationReceived(fusedLocationProviderClient.getLastLocation().getResult());
        isConnected = true;
    }
}

如果不需要位置更新,则断开连接

代码语言:javascript
复制
public void disconnect() {
    if (fusedLocationProviderClient != null) {
        fusedLocationProviderClient.removeLocationUpdates(locationCallback);
        isConnected = false;
    }
}

覆盖locationCallback以获取定位结果

代码语言:javascript
复制
locationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            super.onLocationResult(locationResult);
            onLocationReceived(locationResult.getLastLocation());
        }

        @Override
        public void onLocationAvailability(LocationAvailability locationAvailability) {
            super.onLocationAvailability(locationAvailability);
            //showToast("Location Available!");
        }
    };

这段代码可以让我经常更新位置,而不会出现任何错误。希望能对你有所帮助。谢谢!

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

https://stackoverflow.com/questions/50284748

复制
相关文章

相似问题

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