Android 自动GPS停止获取位置

Android 自动GPS停止获取位置,android,android-service,android-location,android-gps,Android,Android Service,Android Location,Android Gps,我们面临的问题是,在后台服务中经常从GPS获取位置,但有时会在开放区域自动停止定位,而我确信服务是连续运行的,并且在设备空闲模式下也不会影响深度睡眠情况。请帮个忙 private void initLocationManager() { Log.e(TAG, "initializeLocationManager"); if (mLocationManager == null) { mLocationManager = (LocationManager) ge

我们面临的问题是,在后台服务中经常从GPS获取位置,但有时会在开放区域自动停止定位,而我确信服务是连续运行的,并且在设备空闲模式下也不会影响深度睡眠情况。请帮个忙

 private void initLocationManager() {
    Log.e(TAG, "initializeLocationManager");
    if (mLocationManager == null) {
        mLocationManager = (LocationManager) 
 getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    }
    if (mLocationListeners == null) {
        mLocationListeners = new MyLocationListener();
        try {
            mLocationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER,
                    Constant.LOCATION_INTERVAL,
                    Constant.LOCATION_DISTANCE, mLocationListeners);
        } catch (SecurityException ex) {
            mLocationManager = null;
            mLocationListeners = null;
            WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, 
       AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + 
       "20" + "\n");
            Log.i(TAG, "fail to request location update, ignore", ex);
        } catch (IllegalArgumentException ex) {
            mLocationManager = null;
            mLocationListeners = null;
            WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, 
          AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + 
        "21" + "\n");
            Log.d(TAG, "gps provider does not exist " + ex.getMessage());
        } catch (RuntimeException ex) {
            mLocationManager = null;
            mLocationListeners = null;
            WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, 
      AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "22" 
      + "\n");
            Log.d(TAG, "System Exception! Thread has no looper." + 
        ex.getMessage());
        } catch (Exception ex) {
            mLocationManager = null;
            mLocationListeners = null;
            WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, 
    AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "23" + 
    "\n");
        } catch (Throwable ex) {
            mLocationManager = null;
            mLocationListeners = null;
            WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, 
      AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "24" 
       + "\n");
        }
    }

}

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        if (location == null) {
            //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " NULL" + "\n");
            return;
        }
        //lastUpdatedTime = Constant.SIMPLE_DATE_FORMAT.format(location.getTime());
        if (location.getAccuracy() < 50) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
            // WritingFile.getInstance().writeFile(Constant.COORDINATE, true, lastUpdatedTime + " "+location.getLatitude() + ","+ location.getLongitude() + "AC"+ "\n");
        } else {
            if (latitude == 0.0 || longitude == 0.0) {
                latitude = location.getLatitude();
                longitude = location.getLongitude();
            }
            //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, lastUpdatedTime + " "+location.getLatitude() + ","+ location.getLongitude() + "NON AC"+ "\n");
        }
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        switch (status) {
            case LocationProvider.AVAILABLE:
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " AVAILABLE" + "\n");
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, "Last Update Time" + lastUpdatedTime + "\n");
                break;
            case LocationProvider.OUT_OF_SERVICE:
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " OUT_OF_SERVICE" + "\n");
                // WritingFile.getInstance().writeFile(Constant.COORDINATE, true, "Last Update Time" + lastUpdatedTime + "\n");
                removeLocationManager();
                mLocationManager = null;
                mLocationListeners = null;
                break;
            case LocationProvider.TEMPORARILY_UNAVAILABLE:
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " TEMPORARILY_UNAVAILABLE" + "\n");
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, "Last Update Time" + lastUpdatedTime + "\n");
                removeLocationManager();
                mLocationManager = null;
                mLocationListeners = null;
                break;
        }
    }

    @Override
    public void onProviderEnabled(String provider) {
        //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " PROVIDER ENABLEE" + "\n");
    }

    @Override
    public void onProviderDisabled(String provider) {
        //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " PROVIDER DISABLE" + "\n");
    }
}        
private void initLocationManager(){
Log.e(标签“initializeLocationManager”);
if(mLocationManager==null){
MLLocationManager=(LocationManager)
getApplicationContext().getSystemService(Context.LOCATION\u服务);
}
if(mLocationListeners==null){
mlLocationListeners=新的MyLocationListener();
试一试{
mLocationManager.RequestLocationUpdate(
LocationManager.GPS\u提供程序,
常数.u间隔,
恒定位置(距离,mLocationListeners);
}catch(SecurityException-ex){
mLocationManager=null;
mLocationListeners=null;
WritingFile.getInstance().writeFile(常数.ERROR\u LOG,true,
AppManager.getInstance().getCurrentDateTime()+例如getMessage()+
“20”+“\n”);
Log.i(标记“无法请求位置更新,忽略”,例如);
}捕获(IllegalArgumentException ex){
mLocationManager=null;
mLocationListeners=null;
WritingFile.getInstance().writeFile(常数.ERROR\u LOG,true,
AppManager.getInstance().getCurrentDateTime()+例如getMessage()+
“21”+“\n”);
Log.d(标记“gps提供程序不存在”+ex.getMessage());
}捕获(RuntimeException ex){
mLocationManager=null;
mLocationListeners=null;
WritingFile.getInstance().writeFile(常数.ERROR\u LOG,true,
AppManager.getInstance().getCurrentDateTime()+例如getMessage()+“22”
+“\n”);
Log.d(标记“系统异常!线程没有活套”。+
例如getMessage());
}捕获(例外情况除外){
mLocationManager=null;
mLocationListeners=null;
WritingFile.getInstance().writeFile(常数.ERROR\u LOG,true,
AppManager.getInstance().getCurrentDateTime()+例如getMessage()+“23”+
“\n”);
}捕获(可丢弃的ex){
mLocationManager=null;
mLocationListeners=null;
WritingFile.getInstance().writeFile(常数.ERROR\u LOG,true,
AppManager.getInstance().getCurrentDateTime()+例如getMessage()+“24”
+“\n”);
}
}
}
私有类MyLocationListener实现LocationListener{
@凌驾
已更改位置上的公共无效(位置){
if(位置==null){
//WritingFile.getInstance().writeFile(常量.COORDINATE,true,AppManager.getInstance().getCurrentDateTime()+“NULL”+“\n”);
回来
}
//LastUpdateTime=Constant.SIMPLE_DATE_FORMAT.FORMAT(location.getTime());
if(location.getAccurance()<50){
纬度=位置。getLatitude();
longitude=location.getLongitude();
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,lastUpdateTime++“+location.getLatitude()+”,“+location.getLatitude()+”AC“+”\n”);
}否则{
如果(纬度=0.0 | |经度=0.0){
纬度=位置。getLatitude();
longitude=location.getLongitude();
}
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,lastUpdateTime++“+location.getLatitude()+”,“+location.getLatitude()+”非AC“+”\n”);
}
}
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
开关(状态){
案例位置Provider.exe提供:
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,AppManager.getInstance().getCurrentDateTime()+“可用”+“\n”);
//WritingFile.getInstance().writeFile(常量.COORDINATE,true,“上次更新时间”+LastUpdateTime+“\n”);
打破
案例位置Provider.OUT OF_服务:
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,AppManager.getInstance().getCurrentDateTime()+“服务外”+“\n”);
//WritingFile.getInstance().writeFile(常量.COORDINATE,true,“上次更新时间”+LastUpdateTime+“\n”);
removeLocationManager();
mLocationManager=null;
mLocationListeners=null;
打破
案例位置Provider.u暂时不可用:
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,AppManager.getInstance().getCurrentDateTime()+“暂时不可用”+“\n”);
//WritingFile.getInstance().writeFile(常量.COORDINATE,true,“上次更新时间”+LastUpdateTime+“\n”);
removeLocationManager();
mLocationManager=null;
mLocationListeners=null;
打破
}
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,AppManager.getInstance().getCurrentDateTime()+“提供程序启用项”+“\n”);
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
//WritingFile.getInstance().writeFile(Constant.COORDINATE,true,AppManager.getInstance().getCurrentDateTime()+“提供程序禁用”+“\n”);
}
}        
私有void initLocationManager(){
Log.e(标签“initializeLocationManager”);
if(mLocationManager==null){
mLocationManager=(LocationManager)getApplicationContext().getSystemService(Context.LOCATION\u服务);
}
if(mLocationListeners==null){
mlLocationListeners=新的MyLocationListener();
试一试{
 private void initLocationManager() {
        Log.e(TAG, "initializeLocationManager");
        if (mLocationManager == null) {
            mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
        }
        if (mLocationListeners == null) {
            mLocationListeners = new MyLocationListener();
            try {
                mLocationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER,
                        Constant.LOCATION_INTERVAL,
                        Constant.LOCATION_DISTANCE, mLocationListeners);
            } catch (SecurityException ex) {
                mLocationManager = null;
                mLocationListeners = null;
                WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "20" + "\n");
                Log.i(TAG, "fail to request location update, ignore", ex);
            } catch (IllegalArgumentException ex) {
                mLocationManager = null;
                mLocationListeners = null;
                WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "21" + "\n");
                Log.d(TAG, "gps provider does not exist " + ex.getMessage());
            } catch (RuntimeException ex) {
                mLocationManager = null;
                mLocationListeners = null;
                WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "22" + "\n");
                Log.d(TAG, "System Exception! Thread has no looper." + ex.getMessage());
            } catch (Exception ex) {
                mLocationManager = null;
                mLocationListeners = null;
                WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "23" + "\n");
            } catch (Throwable ex) {
                mLocationManager = null;
                mLocationListeners = null;
                WritingFile.getInstance().writeFile(Constant.ERROR_LOG, true, AppManager.getInstance().getCurrentDateTime() + ex.getMessage() + "24" + "\n");
            }
        }

    }

    private class MyLocationListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            if (location == null) {
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " NULL" + "\n");
                return;
            }
            //lastUpdatedTime = Constant.SIMPLE_DATE_FORMAT.format(location.getTime());
            if (location.getAccuracy() < 50) {
                latitude = location.getLatitude();
                longitude = location.getLongitude();
                // WritingFile.getInstance().writeFile(Constant.COORDINATE, true, lastUpdatedTime + " "+location.getLatitude() + ","+ location.getLongitude() + "AC"+ "\n");
            } else {
                if (latitude == 0.0 || longitude == 0.0) {
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                }
                //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, lastUpdatedTime + " "+location.getLatitude() + ","+ location.getLongitude() + "NON AC"+ "\n");
            }
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            switch (status) {
                case LocationProvider.AVAILABLE:
                    //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " AVAILABLE" + "\n");
                    //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, "Last Update Time" + lastUpdatedTime + "\n");
                    break;
                case LocationProvider.OUT_OF_SERVICE:
                    //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " OUT_OF_SERVICE" + "\n");
                    // WritingFile.getInstance().writeFile(Constant.COORDINATE, true, "Last Update Time" + lastUpdatedTime + "\n");
                    removeLocationManager();
                    mLocationManager = null;
                    mLocationListeners = null;
                    break;
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " TEMPORARILY_UNAVAILABLE" + "\n");
                    //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, "Last Update Time" + lastUpdatedTime + "\n");
                    removeLocationManager();
                    mLocationManager = null;
                    mLocationListeners = null;
                    break;
            }
        }

        @Override
        public void onProviderEnabled(String provider) {
            //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " PROVIDER ENABLEE" + "\n");
        }

        @Override
        public void onProviderDisabled(String provider) {
            //WritingFile.getInstance().writeFile(Constant.COORDINATE, true, AppManager.getInstance().getCurrentDateTime() + " PROVIDER DISABLE" + "\n");
        }
    }