2010-07-26 16 views
5

我在Android中使用LocationListener挣扎了一下。我想制作一个能够获取当前GPS位置的应用程序,然后再进行长时间的睡眠。一天或更多。在这段时间内,我希望GPS通知图标不显示。LocationListener正在休眠时关闭GPS图标

我现在有什么,是在onLocationChanged一个Thread.sleep(x),但这会保持图标在休眠期。我如何做到这一点,是否有比使用Thread.sleep更好的方法?

在此先感谢

回答

4

您必须完全关闭LocationManager。我在我的应用程序中执行了此操作,因为我每10秒钟只检查一次位置,因为我发现,关闭比存储位置管理器的min_distance或min_time节省了更多的电量。

喜欢的东西:

// Turning off 
mLocationManager.removeUpdates(gpsListener); 
mLocationManager = null; 

// Turning on again 
mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);    
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_MINTIME, GPS_MINDISTANCE, gpsListener); 

的图标会消失,直到的LocationManager再次开启。

+0

嘿Fluffball 是啊,我终于找到它了,做了它正是你描述的方式。我还了解到Thread.sleep很糟糕。阅读Handler类以及如何延迟任务。事实证明这很糟糕,因为我结束了递归函数。由于我有一个可变的延迟,我不能使用repeat-method。 我终于坚持与报警管理器,它的作品就像一个魅力。 感谢您的回复:) – Andreas 2010-07-31 11:39:06

1

如果你有叠加,认为对他们关闭的位置太:

@Override 
protected void onResume() 
{ 
    Log.i("ProjetTEA", "onResumeMain"); 
    if (mLocationListener != null) 
    { 
     mLocationOverlay.enableMyLocation(); 
     mLocationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE); 
     mLocationManager.requestLocationUpdates(mBestProvider, 10000, 2, mLocationListener); 
    } 
    super.onResume(); 
} 

@Override 
protected void onPause() 
{ 
    Log.i("ProjetTEA", "onPauseMain"); 
    mLocationOverlay.disableMyLocation(); 
    mLocationManager.removeUpdates(mLocationListener); 
    mLocationManager = null; 
    super.onPause(); 
}