【问题标题】:How to get location instantly after gps location enable启用gps定位后如何立即获取位置
【发布时间】:2018-10-03 05:13:14
【问题描述】:

我正在实现一个模块,该模块需要用户 latitudelongitude 离线打卡。

我已经实现了 GPSTracker 类在 LINK

上遵循这个示例

但是在启用 GPS 定位后,我正在打卡,然后这个类返回空位置对象。但是在 3060 秒后它会正确返回位置对象。

我还在 Manifest 中添加了 COARSEFINE 权限,并获得了运行时权限。

所以我需要帮助如何在之后立即获得纬度和经度 启用 GPS 定位。

【问题讨论】:

  • 没有“即时”。你可以使用Last Known Location
  • 是的,我使用了 getLastKnownLocation() 方法,但它不会立即返回位置@Càphêđen
  • getLastKnownLocation 应该立即返回。您唯一应该担心的是它可能已经过时了。对于当前位置,您必须等待服务可用。没有其他机会了。
  • 不,当您启用 GPS 并立即调用 getLastKnownLocation() 时,它在 30-60 后返回 null 它返回位置。我试过了。 @Càphêđen

标签: android android-location android-maps


【解决方案1】:

此代码在 GPS 后立即给出位置

private void getLastLocation()
{
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);


    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            Log.e("location",location.getLatitude()+"");

        }

        public void onStatusChanged(String provider, int status, Bundle extras) {}

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {}
    };

    locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER,locationListener,null);

}

【讨论】:

    【解决方案2】:

    启用 GPS 定位后 mFusedLocationClient.getLastLocation() 返回 null 因为它没有 lastLocation。如果您需要在启用后立即获取位置,则需要进行自我 requestLocationUpdates,例如:

    mFusedLocationClient.requestLocationUpdates(getLocationRequest(), mLocationCallback, null);
    

    来自 com.google.android.gms.location.LocationCallback 的 mLocationCallback;

    并在回调中获得结果,如:

    mLocationCallback = new LocationCallback() {
            @SuppressLint("MissingPermission")
            @Override
            public void onLocationResult(LocationResult locationResult) {
                if (locationResult == null) {
                    mFusedLocationClient.removeLocationUpdates(mLocationCallback);
                    return;
                }
                for (Location location : locationResult.getLocations()) {
                    // Update UI with location data
                    myCoordinate = new LatLng(location.getLatitude(), location.getLongitude());
                }
                mFusedLocationClient.removeLocationUpdates(mLocationCallback);
            }
        };
    

    附言。就我而言,它可以在所有设备上完美运行,但不能在三星 s8 和 s9 上运行

    【讨论】:

      【解决方案3】:

      试试这个:

      FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
      
      private void getDeviceLocation() {   
                  try {
                      Task<Location> locationResult = mFusedLocationProviderClient.getLastLocation();
                      locationResult.addOnCompleteListener(getActivity(), new OnCompleteListener<Location>() {
                          @Override
                          public void onComplete(@NonNull Task<Location> task) {
                              if (task.isSuccessful()) {                 
                                  Location mLastKnownLocation = task.getResult();
                                   Log.i(TAG, "==lat "+mLastKnownLocation.getLatitude());
                                   Log.i(TAG, "==log "+mLastKnownLocation.getLongitude());                      
                              } else {
                                  Log.d(TAG, "Current location is null. Using defaults.");
                                  Log.e(TAG, "Exception: %s", task.getException());
                              }
                          }
                      });
                  } catch (SecurityException e) {
                      Log.e("Exception: %s", e.getMessage());
                  }
           }
      

      【讨论】:

      • 感谢您的回答。这对我不起作用。 @Deven
      • 你找到答案了吗?请帮帮我。
      • 找到了一种解决方案,它使用 Java 而不是使用 Kotlin。 @无辜
      • 请与我分享@NivruttiPawar
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多