Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 位置传感器有时返回相同的位置_Android_Geolocation - Fatal编程技术网

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

Android 位置传感器有时返回相同的位置,android,geolocation,Android,Geolocation,我在我的一台设备上遇到了一个奇怪的问题,我使用google fused location API创建了一个后台服务,它工作得很好,但在我的一台设备上,有时它工作得很好,但有时它会持续返回相同的lat长时间,因为我添加了特定的置换,所以位置永远不会更新。 我所做的解决方法是:先关闭位置传感器,然后打开它,然后它会再次开始发送位置更新 知道为什么会这样吗 手机是qmobiles4-android 6.0 谢谢希望这能帮到你! 像这样声明一些最终变量 private final int LOCATIO


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

知道为什么会这样吗

手机是qmobiles4-android 6.0


谢谢

希望这能帮到你! 像这样声明一些最终变量

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;
并将它们分配到您的位置请求

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);
如果有权限,请连接融合位置提供商

 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;
    }
}
如果不需要位置更新,请断开连接

public void disconnect() {
    if (fusedLocationProviderClient != null) {
        fusedLocationProviderClient.removeLocationUpdates(locationCallback);
        isConnected = false;
    }
}
重写locationCallback以获取位置结果

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!");
        }
    };
这段代码可以让我经常更新位置,没有任何错误。
希望对你有帮助。谢谢大家!

你能告诉我这个代码是否适用于背景位置吗?我有一个web平台表单来跟踪整个城市的交付情况,我在后台跟踪位置时遇到问题,我询问LocationAvailability,如果我通过方法LocationAvailability.isLocationAvailable()获得了可用的位置,它返回true,然后我选择getLastLocation,几乎每次该位置都返回与我在控制器上获得的相同的结果。。有什么建议吗?