【问题标题】:gps location stalls when app is paused应用程序暂停时 GPS 定位停止
【发布时间】:2017-11-03 08:41:57
【问题描述】:

使用 google location.getlatitiude 和 location.getlongitude by

location = locationManager.getLastKnownLocation(locationProvider);
Latitude = location.getLatitude();
Longitude = location.getLongitude();

这是在每 5 秒触发一次的循环运行中完成的。到目前为止一切顺利。

当我“暂停”应用程序时(单击后退按钮使应用程序在后台运行),上述调用不会获取新位置(它们会继续返回暂停前的最后经度和纬度)。

我知道 runnable 仍在触发,因为我还在 runnable 期间写入 Web 数据库并且数据库正在被命中和更新(只是具有停滞的纬度和经度值)。

一旦应用程序取消暂停/恢复并变得可见,经度和纬度读数就会恢复并正确更新。

location、locationManager 和 locationProvider 是 Runnable 之外的全局变量,并在设置 runnable 运行之前创建和验证,因此在应用暂停时创建它们不是问题。

关于为什么暂停会导致这种情况的任何想法?我已经在 2 部不同的手机上进行了测试。两者结果相同。有什么方法可以告诉位置或位置管理器即使在应用暂停时也能继续工作?

【问题讨论】:

  • 你尝试过 LocationListener 类吗?
  • 你在设备或模拟器上测试过吗?如果是设备,请同时指定操作系统。
  • 设备。 Galaxy Note 5 和 Galaxy Note 8 在这个阶段。
  • LocationListener 喜欢代码 [link]stackoverflow.com/questions/42218419/… ?获取实际纬度和经度的内部代码与我的代码相同,所以我不认为听众会有所帮助吗?我的问题不是位置代码触发,而是它没有返回正确的值。我现在将尝试设置一个 locationlistener 来检查它是否有帮助。
  • LocationListener 似乎从未触发过。我什至尝试使用此代码 [link]github.com/codepath/android_guides/issues/220 创建后台服务,但一旦应用程序暂停,它也会停止更新。很奇怪。服务应该在应用处于任何状态时运行。

标签: android gps


【解决方案1】:

你看过 FusedLocationProviderApi 了吗?

您有两种方法来控制您喜欢的更新:

LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, this);

LocationServices.FusedLocationApi.removeLocationUpdates(
                            mGoogleApiClient,this);

当应用程序处于后台时,如果您不调用 removeLocationUpdates,您仍然会收到有关您的位置的更新。 看看文档的这个页面:

https://developer.android.com/training/location/receive-location-updates.html

【讨论】:

    【解决方案2】:

    FusedLocationProvider 是我需要的提示。

    mLocationRequest = new LocationRequest();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(5000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setSmallestDisplacement(10);
    getFusedLocationProviderClient(getApplicationContext()).requestLocationUpdates(mLocationRequest, new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
               Toast.makeText(getApplicationContext(),locationResult.getLastLocation().getLatitude()+" "+locationResult.getLastLocation().getLongitude()+" "+locationResult.getLastLocation().getAccuracy(), Toast.LENGTH_SHORT).show();
            }
        },
        Looper.myLooper());
    

    该代码可以放在主活动 oncreate 中。即使应用程序暂停,它也会每 5 秒触发一次。以前我正在使用服务等来尝试使其正常工作。新的 FusedLocationProvider 非常简单(一旦找到工作代码)。我希望以上内容对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2013-03-02
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多