如何在gps位置启用后立即获取位置

问题描述 投票:2回答:3

我正在实施一个模块,该模块需要用户经度和经度来离线打卡。

我在LINK上实现了GPSTracker类跟随这个例子

但是在启用GPS位置后,我正在打击出勤,然后这个类返回null位置对象。但是在30到60秒之后它会正确返回位置对象。

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

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

android android-location android-maps
3个回答
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);
        }
    };

PS。在我的情况下,它完全适用于所有设备,但不适用于三星s8和s9


0
投票

试试这个:

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());
            }
     }

0
投票

此代码在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);

}
© www.soinside.com 2019 - 2024. All rights reserved.