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
Post a Comment