【发布时间】:2010-07-26 08:21:00
【问题描述】:
我在 Android 中的 LocationListener 有点挣扎。我想制作一个应用程序来获取当前的 GPS 位置,然后睡很长时间。一天或更长时间。在这段时间内,我希望 GPS 通知图标不显示。
我现在拥有的是 onLocationChanged 一个 Thread.sleep(x) 但这将使图标在睡眠期间保持打开状态。我该怎么做,有没有比使用 Thread.sleep 更好的方法?
提前致谢
【问题讨论】:
我在 Android 中的 LocationListener 有点挣扎。我想制作一个应用程序来获取当前的 GPS 位置,然后睡很长时间。一天或更长时间。在这段时间内,我希望 GPS 通知图标不显示。
我现在拥有的是 onLocationChanged 一个 Thread.sleep(x) 但这将使图标在睡眠期间保持打开状态。我该怎么做,有没有比使用 Thread.sleep 更好的方法?
提前致谢
【问题讨论】:
为此,您必须完全关闭 LocationManager。我是在我的应用程序中完成的,我只每 10 秒检查一次位置,因为我发现关闭比 LocationManager 的 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。
【讨论】:
如果您有叠加层,请考虑禁用它们上的位置:
@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();
}
【讨论】: