我正在开发一个在开始时获取用户位置的应用程序。我使用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);
我已经尝试了很多,但我无法弄清楚实际问题是什么。任何帮助,将不胜感激。谢谢
答案 0 :(得分:3)
为了让应用程序保持响应,很多事情都完成了Async。这是一件好事。看起来你使用的图书馆就是这样的。请参阅Sample of MainActivity.java。 onActivityResult()
是您正在寻找的。 p>
那么,它什么时候回来了?我们只是不确定......
你怎么阻止呢?嗯,这是Android的另一部分。请参阅此Android Activity Lifecycle。您会注意到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();
}
}