每次询问时如何确保获得gps位置

Posted

技术标签:

【中文标题】每次询问时如何确保获得gps位置【英文标题】:How to be sure to get gps location each time you ask 【发布时间】:2020-07-09 07:59:05 【问题描述】:

在我的应用中,人们发布了其他人可以看到的广告。他们使用公告的创建者和阅读它的人之间的距离进行过滤。 如果有人发布广告,我需要确保获得他的位置。如果有人在寻找广告,我需要确保获得他的位置以对广告进行分类。

在我的代码中,我有一种获取位置的方法,但它有时会返回 null。

这是小代码(我已经检查了权限等)

 FusedLocationProviderClient mFusedLocationProviderClient;
    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context);

    try
        if(mLocationPermissionsGranted)
            final Task location = mFusedLocationProviderClient.getLastLocation();
            location.addOnCompleteListener(new OnCompleteListener() 
                @Override
                public void onComplete(@NonNull Task task) 
                    if(task.isSuccessful())
                        Log.d(TAG, "onComplete: found location!");

                        Location currentLocation = (Location) task.getResult();

                        if (currentLocation != null)
                        
                            double Latit = currentLocation.getLatitude();
                            double Longit = currentLocation.getLongitude();

                            LatLng latLong = new LatLng(Latit, Longit);
                        //TODO do something with latlong
                        
                    else
                        Log.d(TAG, "onComplete: current location is null");
                        Toast.makeText(context, "unable to get current location", Toast.LENGTH_SHORT).show();




                    
                
            );
        
    catch (SecurityException e)
        Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage() );
    

但有时,即使任务成功,Location currentLocation = (Location) task.getResult(); 也会返回 null。我真的不知道为什么。 我想知道是否有一种可靠的方法可以在我询问时获取位置(当然,它的位置是在手机上启用的)。 谢谢你

【问题讨论】:

developer.android.com/training/location/… 【参考方案1】:

那是因为您只要求获取最后一个位置。如果最近有其他应用程序一直在使用 gps,则设备可以拥有它,但有时需要一段时间才能获得位置。

您应该订阅位置更改并至少等到您获得第一个位置。一种方法可能是仅在您收到最后一个位置为空时订阅。在这种情况下,您应该执行 requestLocationUpdates 并通过回调请求权限,以防应用在后台时需要该位置,如果您只需要一个位置,则可以在第一个位置到达 removeLocationUpdates 后停止它。

看看the docs。或者你可以使用像 rxlocation 这样的库,以防你觉得 observables 比回调更舒服。

【讨论】:

以上是关于每次询问时如何确保获得gps位置的主要内容,如果未能解决你的问题,请参考以下文章

每次应用启动时如何强制phonegap询问地理位置?

Android模拟器GPS位置给出了错误的时间

如何通过点击在 Android 中获得准确的 GPS 位置

为啥我在同一位置获得不同的 GPS 点

Android GPS 位置与其他 GPS 设备

需要 android 活动才能等到获得 GPS 位置