启用gps定位后如何立即获取位置
Posted
技术标签:
【中文标题】启用gps定位后如何立即获取位置【英文标题】:How to get location instantly after gps location enable 【发布时间】:2018-10-03 05:13:14 【问题描述】:我正在实现一个模块,该模块需要用户 latitude 和 longitude 离线打卡。
我已经实现了 GPSTracker 类在 LINK
上遵循这个示例但是在启用 GPS 定位后,我正在打卡,然后这个类返回空位置对象。但是在 30 到 60 秒后它会正确返回位置对象。
我还在 Manifest 中添加了 COARSE
和 FINE
权限,并获得了运行时权限。
所以我需要帮助如何在之后立即获得纬度和经度 启用 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定位后如何立即获取位置的主要内容,如果未能解决你的问题,请参考以下文章