java - Service gets killed even with notification. Needs to stay forever -


i have app in count number of steps taken user , show in notification forever. have created notification , set startforeground(true). after service gets killed after time. want notification there long app installed. app called pacer (https://play.google.com/store/apps/details?id=cc.pacer.androidapp) does.

the reason @ midnight everyday send data server triggered service only.

also have never seen pacer apps notification getting killed. how that.?

here service class.

public class stepcounterservice extends service implements sensoreventlistener, steplistener, webserviceinterface, googleapiclient.connectioncallbacks,         googleapiclient.onconnectionfailedlistener, locationlistener {      session session;     localbroadcastmanager broadcaster;     sensormanager sensormanager;     sensor sensor;     stepdetector stepdetector;     notificationmanager notificationmanager;     remoteviews contentview;     googleapiclient googleapiclient;     locationrequest mlocationrequest;     alarmmanager sendactivityalarmmanager;     pendingintent activityalarmintent;      double currentlatitude;     double currentlongitude;      static final int main_notification_id = 1;     private int set_last_location_request_code = 2;     appusermodel appuser;      static final public string step_increment = "com.fimo.step_incremented";     static final public string session_complete = "com.fimo.session_complete";     static final public string activity_complete = "com.fimo.activity_complete";     static final public string step_increment_key = "step_count";      private boolean issessionon;      int startingsteps = 0;     int endingsteps = 0;     private int numberofsteps = 0;      private long no_step_interval = 5000;     notification notification;      @nullable     @override     public ibinder onbind(intent intent) {         return null;     }      @override     public int onstartcommand(intent intent, int flags, int startid) {         // todo auto-generated method stub         session = new session(this);         updatemainnotification(session.gettodaysteps() + "");         startforeground(main_notification_id, notification);         return start_sticky;     }      @override     public void oncreate() {         super.oncreate();          session = new session(this);         buildgoogleapiclient();          broadcaster = localbroadcastmanager.getinstance(this);          sensormanager = (sensormanager) getsystemservice(sensor_service);         sensor = sensormanager.getdefaultsensor(sensor.type_accelerometer);         stepdetector = new stepdetector();         stepdetector.registerlistener(stepcounterservice.this);          sensormanager.registerlistener(this, sensor, sensormanager.sensor_delay_fastest);          notificationmanager = (notificationmanager) getsystemservice(activity.notification_service);         contentview = new remoteviews(getpackagename(), r.layout.view_notification);         contentview.setimageviewresource(r.id.image, r.drawable.notification);          gson gson = new gson();         appuser = gson.fromjson(session.getappuser(), appusermodel.class);          if (appuser != null)             updatemainnotification(session.gettodaysteps() + "");          startalarm();     }      public void sendstepincrementbroadcast(int numberofsteps) {         intent intent = new intent(step_increment);         intent.putextra(step_increment_key, numberofsteps);         broadcaster.sendbroadcast(intent);     }      @override     public void onsensorchanged(sensorevent event) {         if (event.sensor.gettype() == sensor.type_accelerometer) {             stepdetector.updateaccel(event.timestamp, event.values[0], event.values[1], event.values[2]);         }     }      @override     public void onaccuracychanged(sensor sensor, int accuracy) {      }      @override     public void getresponse(int responsecode, string responsestring, string requesttype, int requestcode) {      }      @override     public void step(long timens) {          if (!issessionon)             startingsteps = session.gettodaysteps();          issessionon = true;          numberofsteps = session.gettodaysteps();         numberofsteps++;          sendstepincrementbroadcast(numberofsteps);          session.settodaysteps(numberofsteps);          if (appuser != null)             updatemainnotification(numberofsteps + "");         else {             try {                 notificationmanager.cancel(main_notification_id);             } catch (exception e) {              }         }          countdowntimer.cancel();         countdowntimer.start();     }      countdowntimer countdowntimer = new countdowntimer(no_step_interval, 1000) {          public void ontick(long millisuntilfinished) {          }          public void onfinish() {             endingsteps = session.gettodaysteps();             issessionon = false;              int numberofsteps = endingsteps - startingsteps;              intent intent = new intent();             intent.addflags(intent.flag_include_stopped_packages);             intent.setaction(session_complete);             intent.putextra("sessionsteps", numberofsteps);             sendbroadcast(intent);         }      };      @override     public void onconnected(@nullable bundle bundle) {         location location = null;          if (activitycompat.checkselfpermission(this, manifest.permission.access_fine_location) != packagemanager.permission_granted && activitycompat.checkselfpermission(this, manifest.permission.access_coarse_location) != packagemanager.permission_granted) {             return;         }          location = locationservices.fusedlocationapi.getlastlocation(googleapiclient);          if (location == null) {             locationservices.fusedlocationapi.requestlocationupdates(googleapiclient, mlocationrequest, this);          } else {             currentlatitude = location.getlatitude();             currentlongitude = location.getlongitude();              setlastlocation(currentlatitude, currentlongitude);         }     }      @override     public void onconnectionsuspended(int i) {      }      @override     public void onconnectionfailed(@nonnull connectionresult connectionresult) {      }      @override     public void onlocationchanged(location location) {         currentlatitude = location.getlatitude();         currentlongitude = location.getlongitude();          setlastlocation(currentlatitude, currentlongitude);     }      protected synchronized void buildgoogleapiclient() {         googleapiclient = new googleapiclient.builder(this)                 .addconnectioncallbacks(this)                 .addonconnectionfailedlistener(this)                 .addapi(locationservices.api)                 .build();         googleapiclient.connect();          mlocationrequest = locationrequest.create()                 .setpriority(locationrequest.priority_high_accuracy)                 .setinterval(10 * 1000)        // 10 seconds, in milliseconds                 .setfastestinterval(1 * 1000);     }      private void startalarm() {          sendactivityalarmmanager = (alarmmanager) this.getsystemservice(context.alarm_service);          intent intent = new intent(this, activitycompletereceiver.class);         activityalarmintent = pendingintent.getbroadcast(this, 0, intent, 0);          calendar calendar = calendar.getinstance();         calendar.settimeinmillis(system.currenttimemillis());         calendar.set(calendar.hour_of_day, generaterandomtime()[0]);         calendar.set(calendar.minute, generaterandomtime()[1]); //        calendar.set(calendar.hour_of_day, 02); //        calendar.set(calendar.minute, 19);         if (system.currenttimemillis() > calendar.gettimeinmillis()) {             calendar.add(calendar.day_of_year, 1);         }          sendactivityalarmmanager.setrepeating(alarmmanager.rtc_wakeup, calendar.gettimeinmillis(),                 alarmmanager.interval_day, activityalarmintent);     }      private int[] generaterandomtime() {         int[] timeintegers = new int[2];          final random r = new random();         timeintegers[0] = r.nextint(54 - 50) + 54;         timeintegers[1] = r.nextint(59 - 1) + 1;          return timeintegers;     }      private void updatemainnotification(string stepsvalue) {          string title = "today: " + stepsvalue + " steps - " + linksandkeys.decimalformat.format(getdatafromsteps(session.gettodaysteps())[1]) + " fimos";         string message = "keep walking , keep earning";          contentview.settextviewtext(r.id.textviewtitle, title);         contentview.settextviewtext(r.id.textviewmessage, message);          intent notificationintent = new intent(stepcounterservice.this, splashactivity.class);         notificationintent.setflags(intent.flag_activity_clear_top | intent.flag_activity_single_top);         pendingintent intent = pendingintent.getactivity(stepcounterservice.this, 0, notificationintent, 0);          notificationcompat.builder mbuilder = new notificationcompat.builder(this)                 .setsmallicon(r.drawable.running)                 .setongoing(true)                 .setcontent(contentview)                 .setcontentintent(intent);          notification = mbuilder.build();         notification.flags |= notification.flag_ongoing_event;         startforeground(main_notification_id, notification);     }  } 

how keep service on forever , keep notification on app pacer (https://play.google.com/store/apps/details?id=cc.pacer.androidapp)


Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -