【问题标题】:Android Smart Location Library is always connected to gps after application closedAndroid智能位置库在应用程序关闭后始终连接到gps
【发布时间】:2017-09-10 08:57:05
【问题描述】:

我正在开发一个在启动时获取用户位置的应用程序。我正在使用Smart Location Library 来获取位置和反向地理编码。但主要问题是即使在应用程序关闭后,GPS 也会在通知中显示。我检查了堆栈跟踪,但没有发现任何泄漏的窗口异常。 我正在使用此代码来获取我的位置..

private void getMyLocation(){
    final long mLocTrackingInterval = 1000000 * 5; // 5 sec
    float trackingDistance = 1000 * 10;
    LocationAccuracy trackingAccuracy = LocationAccuracy.HIGH;
    LocationParams.Builder builder = new LocationParams.Builder()
                .setAccuracy(trackingAccuracy)
                .setDistance(trackingDistance)
                .setInterval(mLocTrackingInterval);
    SmartLocation.with(mContext)
                .location(provider)
                // .continuous()
                .oneFix()
                .config(builder.build())
                .start(this);
}

@Override
public void onLocationUpdated(Location location) {
    SmartLocation.with(mContext).geocoding()
            .reverse(location,new OnReverseGeocodingListener() {
                @Override
                public void onAddressResolved(Location location, List<Address> results) {
                    if (results.size() > 0) {
                        mAddressList=results;
                        mLocation=location;
                        tvLocation.setText( results.get(0).getAddressLine(0)+"\n"+results.get(0).getAddressLine(1));
                    }
                }
            });
}

onStop() 主要活动的方法..

@Override
protected void onStop() {
    super.onStop();
    SmartLocation.with(mContext).location(provider).stop();
    SmartLocation.with(mContext).geocoding().stop();
}

编辑

我正在使用这个 pvider。我也尝试过其他提供商。但结果还是一样。

private LocationGooglePlayServicesWithFallbackProvider provider=new LocationGooglePlayServicesWithFallbackProvider(mContext);

我尝试了很多,但无法弄清楚实际问题是什么。任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 你在用什么provider
  • @azizbekian 我正在使用LocationGooglePlayServicesWithFallbackProvider 也尝试过其他提供商
  • 使用 SmartLocation.with(context).location().stop();停止位置监听。
  • @VivekSinha 我已经在 Activty 的 onStop() 方法上添加了这段代码。
  • 你测试过 .stop() 方法吗?您可以通过手动调用 .stop() 方法来做到这一点,该方法由按钮触发,因此您知道这些调用有效。

标签: android android-location android-gps


【解决方案1】:

为了让应用保持响应,很多事情都是异步完成的。这是一件好事。看起来您使用的图书馆就是这样工作的。请参阅Sample of MainActivity.javaonActivityResult() 就是你要找的那个。

那么,它什么时候返回数据?我们只是不确定...

那你怎么阻止它呢?好吧,那是 Android 的另一部分。请参阅此Android Activity Lifecycle。你会注意到虽然onStop()通常被调用,但当用户做其他事情时,它并不是第一件事。如果你等待onStop() 被调用,你不知道那是什么时候。 如果用户离开某个 App 并手动将其从内存中删除,肯定只会调用 onPause(),其余的根据我的经验是有点碰碰运气。

因此,如果您想在用户离开时关闭 GPS(但您的应用仍在内存中,准备接收通知),您可以在 onPause() 中执行此操作。像这样的:

@Override
protected void onPause() {
    super.onPause();

    if (SmartLocation == still_running) { // pseudo code
        SmartLocation.with(mContext).location(provider).stop();
        SmartLocation.with(mContext).geocoding().stop();
    }
}

【讨论】:

  • 所以,基本上,您声称onStop()保证被调用,而onPause() 是,这是不正确的。 onStop() 即使在 user moves away from an App and manually deletes it from memory 的情况下也会被调用。
  • 这确实是我的经验。我知道文档说它每次都被调用。但它在我的一个应用程序中产生了一个错误,因为它在预期的其他时间被调用(如果有的话)。
  • 你能发布一个简单的项目来展示这种行为吗?我无法重现。
  • 现在,没有。因为我认为这对原始问题没有帮助。 (因为那将是一个不同的问题,我让它按照我想要的方式工作)你有一个(其他)想法,这个问题可能会出错吗?
  • 如果我有一个准确的答案,我可以澄清,我会发布它。只要我没有,我就看看别人是怎么做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多