不知道为什么,但有时候LOCManager在关闭申请后仍然有效。
我在一个Activity中调用onCreate-Methode中的startGPS()(只有一个,我称之为StartActivity)。
protected void startGPS()
{
try
{
lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
catch(Exception e)
{
e.printStackTrace();
}
}
如果此活动将被销毁(因此,当应用程序将关闭时),我调用endGPS()
public void endGPS()
{
try
{
lmanager.removeUpdates(this);
lmanager=null;
}
catch(Exception e)
{
e.printStackTrace();
}
}
一些想法,一些建议,我做错了什么?!
答案 0 :(得分:26)
您应该在方法removeUpdates
中调用方法onPause
:
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
Log.i(TAG, "onPause, done");
}
答案 1 :(得分:12)
您的活动是否可能未被销毁?即:你按下主页按钮。将您的gps开始/结束移至onStart
和onPause
。
答案 2 :(得分:8)
模拟器一旦加载就永远不会摆脱GPS图标。因此,在模拟器上,您无法使用GPS图标作为GPS是否仍在运行的测试。但是,在设备上,图标应该消失。
我应该使用两个不同的听众吗?
我肯定会的。我不知道removeUpdates()
是否会删除这两个请求,或者即使两个请求都注册了单个侦听器。
答案 3 :(得分:2)
我看到这篇帖子已经有一段时间了,但也许它会帮助其他人。我使用:removeUpdates(this),因为我的监听器是我实现de location manager的活动,你需要指出你的监听器。
答案 4 :(得分:2)
我使用:locationManager.removeUpdates(locationListener);它的工作
@Override
protected void onPause() {
super.onPause();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.removeUpdates(locationListener);
}
答案 5 :(得分:0)
相当古老的查询,但这对我有用。
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
mLocationManager.removeUpdates(locationListener);
}