diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 51054c7b..264eab6f 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -131,6 +131,7 @@ public class MicroPhotoService extends Service { private ScreenActionReceiver mScreenaAtionReceiver = null; private NetworkChangedReceiver mNetworkChangedReceiver = null; + private long mGpsTimeout = 60000; // 1 minute private PendingIntent mPreviousGpsTimer = null; private ServiceHandler mHander = null; @@ -373,7 +374,11 @@ public class MicroPhotoService extends Service { String md5 = intent.getStringExtra("md5"); } else if (TextUtils.equals(ACTION_GPS_TIMEOUT, action)) { mService.mPreviousGpsTimer = null; - mService.mLocationManager.removeUpdates(mService.mLocationListener); + try { + mService.mLocationManager.removeUpdates(mService.mLocationListener); + } catch (Exception ex) { + ex.printStackTrace(); + } mService.enableGps(false); } } @@ -1076,6 +1081,35 @@ public class MicroPhotoService extends Service { */ } public void enableGps(boolean enabled) { + if (enabled) { + try { + AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); + if (mPreviousGpsTimer != null) { + alarmManager.cancel(mPreviousGpsTimer); + mPreviousGpsTimer = null; + } + + Intent intent = new Intent(); + intent.setAction(ACTION_GPS_TIMEOUT); + mPreviousGpsTimer = PendingIntent.getBroadcast(this, 0, intent, 0); + + alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mGpsTimeout, mPreviousGpsTimer); + } catch (Exception ex) { + ex.printStackTrace(); + } + } else { + if (mPreviousGpsTimer != null) { + try { + AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); + alarmManager.cancel(mPreviousGpsTimer); + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + mPreviousGpsTimer = null; + } + } + } + SysApi.enableGps(getApplicationContext(), enabled); }