如何使后台gps服务保持活跃状态

时间:2011-10-08 02:22:09

标签: android background gps

我正在尝试将后台gps位置监听器作为一项服务,可供我的应用中的所有活动使用。它也应该扫描位置,直到我“杀死”它。但是我意识到,几个小时之后gps服务就会被杀死,我不能再找到位置了。

如何将此服务保持活动状态(至少是locationManager和位置监听器),直到我想要它为止?

由于

public class GPS extends IntentService {
    public static LocationListener loc_listener = null;
    public static LocationManager locationManager = null;

    public GPS() {
        super("GPS");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (loc_listener == null) {
            loc_listener = new LocationListener() {

                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderEnabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderDisabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub

                }
            };
        }
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, loc_listener);
    }

    public static void killGPS() {
        if (locationManager != null && loc_listener != null) {
            locationManager.removeUpdates(loc_listener);
        }
    }

}

1 个答案:

答案 0 :(得分:2)

  

但是我意识到,几个小时之后gps服务就会被杀死,我不能再找到位置了。

首先,一直保持GPS开机是一个非常糟糕的主意,因为用户的电池寿命会受到很大影响。您的应用程序需要提供巨大的价值(例如Google导航)以保证此电力成本。

其次,永远不要从IntentService注册听众。一旦onHandleIntent()结束,服务就会关闭......但是您泄漏了已注册的侦听器。这有效地保持了后台线程。但是,由于您没有活动组件,Android最终将终止您的流程。