Android 自动GPS停止获取位置
我们面临的问题是,在后台服务中经常从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
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");
}
}