【问题标题】:is there any android java code to stop movement of GPS location when device is at same location?当设备位于同一位置时,是否有任何 android java 代码可以停止 GPS 位置的移动?
【发布时间】:2019-11-22 20:17:16
【问题描述】:

我正在开发车辆跟踪应用程序,我们正在使用驾驶员 GPS 来获取位置。

我正在使用 Google 定期位置更新代码,间隔为 5 秒。

当司机在一个点停留大约 2 分钟并且更多的 GPS 位置从这里和那里移动,所以我绘制的折线不平滑它在那个点上造成混乱。

所以任何人都可以指导我如何避免从设备获取虚假位置。

【问题讨论】:

    标签: android


    【解决方案1】:

    此功能将在您的设备理想时发送位置。

       LocationCallback mHistoryIdealLocationCallback;  
    
      private void requestHistoryUpdates() {
            try {
                LocationRequest request = new LocationRequest();
                request.setInterval(10 * 60 * 1000);
                request.setFastestInterval(10 * 60 * 1000);
                request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                clientHistoryIdeal = LocationServices.getFusedLocationProviderClient(this);
                int permission = ContextCompat.checkSelfPermission(this,
                        Manifest.permission.ACCESS_FINE_LOCATION);
    
                if (permission == PackageManager.PERMISSION_GRANTED) {
                    mHistoryIdealLocationCallback = new LocationCallback() {
                        @Override
                        public void onLocationResult(LocationResult locationResult) {
                            Location location = locationResult.getLastLocation();
    
                        }
                    };
                    clientHistoryIdeal.requestLocationUpdates(request, mHistoryIdealLocationCallback, null);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    还可以使用 10 米的最小位移管理您的实时位置:

    LocationRequest request = new LocationRequest();
                request.setInterval(10 * 1000);
                request.setFastestInterval(10 * 1000);
                request.setSmallestDisplacement(10);
    

    【讨论】:

      【解决方案2】:

      您可以在用户不移动时使用location.getSpeed(),然后您的功能未运行或折线未在屏幕上绘制

      你可以这样使用。

      if(location.getSpeed()>=20){
      //Write you condition
      }
      

      另一个解决方案是,在这个公式中,您可以检查位移并执行您的任务

       public static double displacement(LatLng start, LatLng end) {
        try {
          Location location1 = new Location("locationA");
          location1.setLatitude(start.latitude);
          location1.setLongitude(start.longitude);
          Location location2 = new Location("locationA");
          location2.setLatitude(end.latitude);
          location2.setLongitude(end.longitude);
      
          double distance = location1.distanceTo(location2);
          DecimalFormat decimalFormat = new DecimalFormat("#.#");
          DecimalFormatSymbols custom = new DecimalFormatSymbols();
          custom.setDecimalSeparator('.');
          decimalFormat.setDecimalFormatSymbols(custom);
          return Double.parseDouble(decimalFormat.format(distance));
      } catch (Exception e) {
          Utils.LogExceptionToFabric(e);
          e.printStackTrace();
      }
      return 0;
      }
      

      【讨论】:

      • 感谢您的回复。如果您看到我上传的上述图片,当车辆在路上时,位置提供者会提供一些其他坐标,距离确切位置大约 50 米.因此,如果我检查位移,我的逻辑将接受该新坐标,即使它是假的。
      • 在 MI 手机中,我无法通过 fusedLocationProvider 获取确切位置。是否有任何设置可以获取准确的位置。
      • 是的,你是对的,但在你可以检查 location.getspeed()>30 之前
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多