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

Posted

技术标签:

【中文标题】启用gps定位后如何立即获取位置【英文标题】:How to get location instantly after gps location enable 【发布时间】: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 【参考方案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 使用这个库。 github.com/mrmans0n/smart-location-lib@Innocent

以上是关于启用gps定位后如何立即获取位置的主要内容,如果未能解决你的问题,请参考以下文章

一般 Android GPS 行为

手机重启后Android无法获取位置

Cordova 地理定位插件无法从 Android 的 GPS 获取位置

即使启用了 GPS,也无法获取位置

允许访问后立即获取当前位置工作

启用高精度时获取低精度 GPS 位置