Android智能位置库在应用关闭后仍与GPS保持连接

4

我正在开发一个应用程序,它在启动时获取用户位置。我正在使用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();
}

编辑

我正在使用此提供商。我也尝试了其他提供商,但结果仍然相同。

private LocationGooglePlayServicesWithFallbackProvider provider=new LocationGooglePlayServicesWithFallbackProvider(mContext);

我尝试了很多次,但是无法确定实际问题所在。如果有任何帮助将不胜感激。谢谢。


@azizbekian 我正在使用 LocationGooglePlayServicesWithFallbackProvider,也尝试了其他提供者。 - Abhishek Singh
使用 SmartLocation.with(context).location().stop(); 停止位置监听。 - Vivek Sinha
你测试过 .stop() 方法了吗?你可以手动调用 .stop() 方法来进行测试,例如通过按钮触发,这样你就知道这些调用是有效的。 - Flummox - don't be evil SE
@Abhishek Singh 你真的想使用 https://github.com/mrmans0n/smart-location-lib 吗?在 Activity/Fragment/Service 中可以自定义位置服务... 这样更灵活,可以更好地配合我们应用的功能。 - Sreehari
1000000 * 5; // 5秒 ); - Padma Kumar
显示剩余4条评论
1个回答

3
为了使应用程序保持响应,许多操作都是异步完成的。这是一件好事。看起来你使用的库也是这样工作的。请参见MainActivity.java示例onActivityResult() 是你要找的方法。
那么它什么时候返回数据?我们不确定...
那么如何停止它呢?嗯,这是 Android 的另一个部分。请参阅Android Activity 生命周期。你会注意到,虽然通常会调用onStop(),但当用户做其他事情时,它不是第一件事。如果你等待onStop()被调用,你就不知道什么时候会被调用。如果用户移动到一个应用程序并手动从内存中删除它,则只会确保调用 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() 也将被调用。 - azizbekian
目前为止,不需要。因为我认为这不会对原问题有所帮助。(因为那将是一个不同的问题,而且我已经按照自己的意愿使其工作了)你有其他想法吗?可能是哪里出了问题? - Flummox - don't be evil SE
1
如果我有一个可以明确的确切答案,我会贴出来澄清。只要我没有答案,我就看看别人是怎么做的。 - azizbekian
@Abhishek Singh,是什么让它对你起作用了?要移动到onPause()吗? - Flummox - don't be evil SE
是的 @Flummox。onActivityResult 没有用,因为它是针对 LocationGooglePlayServicesProvider 的,而我正在使用 LocationGooglePlayServicesWithFallbackProvider - Abhishek Singh
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接