Android 智能位置库在应用程序关闭后始终连接到 gps
Android Smart Location Library is always connected to gps after application closed
我正在开发一个在开始时获取用户位置的应用程序。我正在使用 Smart Location Library 获取位置和反向地理编码。但主要问题是 GPS 已连接,即使在应用程序关闭后也会显示在通知中。我检查了堆栈跟踪但没有发现任何泄漏的 window 异常。
我正在使用此代码获取我的位置..
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);
我已经尝试了很多,但无法弄清楚实际问题是什么。任何帮助,将不胜感激。谢谢
为了让应用程序保持响应,很多事情都是异步完成的。这是一件好事。看起来您使用的库就是这样工作的。参见Sample of MainActivity.java。 onActivityResult()
就是你要找的人。
那么,它什么时候返回数据?我们只是不确定...
那怎么阻止呢?好吧,那是 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();
}
}
我正在开发一个在开始时获取用户位置的应用程序。我正在使用 Smart Location Library 获取位置和反向地理编码。但主要问题是 GPS 已连接,即使在应用程序关闭后也会显示在通知中。我检查了堆栈跟踪但没有发现任何泄漏的 window 异常。 我正在使用此代码获取我的位置..
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);
我已经尝试了很多,但无法弄清楚实际问题是什么。任何帮助,将不胜感激。谢谢
为了让应用程序保持响应,很多事情都是异步完成的。这是一件好事。看起来您使用的库就是这样工作的。参见Sample of MainActivity.java。 onActivityResult()
就是你要找的人。
那么,它什么时候返回数据?我们只是不确定...
那怎么阻止呢?好吧,那是 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();
}
}