Stopping an android service -


i trying make app switches mobile data on , off , when screen on mobile data should on well. trying stop service when user turns screen on. have main activity calls switchservice class , there way stop service inside service ? made lot of googling nothing worked ,, ondestroy() , stopself() ..... whats problem ?

public class switchservice extends service {  handler mhandler;  @override public void oncreate() {  }  private void switchoff() {       schedulenext(10*1000);     setmobiledataenabled(this,false);    } private void switchon() {       schedulenext2(10*1000);     setmobiledataenabled(this,true);     system.out.println("still runnin");    }  private void schedulenext(int time) {     mhandler.postdelayed(new runnable() {         public void run() {              switchon();          }     },time); } private void schedulenext2(int time) {     mhandler.postdelayed(new runnable() {         public void run() {              switchoff();         }     },time); }   @override public int onstartcommand(intent intent, int flags, int startid) {      mhandler = new android.os.handler();     switchon();      new thread(new runnable(){          @override         public void run() {             checklock();          }      }).start();       return start_sticky; }   private void checklock() {       schedulenextlockcheck(1*1000);      powermanager powermanager = (powermanager) getsystemservice(power_service);     boolean isscreenon = powermanager.isscreenon();       if (isscreenon) {          system.out.println("screen onnn");         setmobiledataenabled(this,true);         switchservice.this.ondestroy();     }     }  private void schedulenextlockcheck(int time) {     mhandler.postdelayed(new runnable() {         public void run() {              checklock();          }     },time); }  @override public void ondestroy() {     super.ondestroy();   }  @override public ibinder onbind(intent intent) {      return null; }  private void setmobiledataenabled(context context, boolean enabled) {     final connectivitymanager conman = (connectivitymanager) context             .getsystemservice(context.connectivity_service);     class conmanclass;     try {         conmanclass = class.forname(conman.getclass().getname());          final field iconnectivitymanagerfield = conmanclass                 .getdeclaredfield("mservice");          iconnectivitymanagerfield.setaccessible(true);         final object iconnectivitymanager = iconnectivitymanagerfield                 .get(conman);         final class iconnectivitymanagerclass = class                 .forname(iconnectivitymanager.getclass().getname());         @suppresswarnings("unchecked")         final method setmobiledataenabledmethod = iconnectivitymanagerclass                 .getdeclaredmethod("setmobiledataenabled", boolean.type);         setmobiledataenabledmethod.setaccessible(true);          setmobiledataenabledmethod.invoke(iconnectivitymanager, enabled);     } catch (exception e) {         e.printstacktrace();     }  } 

stopself stop service, doesn't stop handlers, threads, etc owned service. have hand in ondestroy method.


Comments