How to unregister broadcast receiver which is in service class in android? -
i want startreceiver , stopreceiver buttonon , butttonoff click button on click receiver start buttonoff click not stop gives me error
buttonon.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { calendar cur_cal = calendar.getinstance(); cur_cal.settimeinmillis(system.currenttimemillis()); intent intent = new intent(mainactivity.this, wifiscanservice.class); pendingintent pintent = pendingintent.getservice(mainactivity.this, 0, intent, 0); alarmmanager alarm = (alarmmanager)getsystemservice(context.alarm_service); alarm.setrepeating(alarmmanager.rtc_wakeup, cur_cal.gettimeinmillis(), 10*1000, pintent); startservice(new intent(mainactivity.this,wifiscanservice.class)); } buttonoff..setonclicklistener(new onclicklistener() {
@override public void onclick(view v) { calendar cur_cal = calendar.getinstance(); cur_cal.settimeinmillis(system.currenttimemillis()); intent intent = new intent(mainactivity.this, wifiscanservice.class); pendingintent pintent = pendingintent.getservice(mainactivity.this, 0, intent, 0); alarmmanager alarm = (alarmmanager)getsystemservice(context.alarm_service); alarm.cancel(pintent); stopservice(new intent(mainactivity.this,wifiscanservice.class)); } }); wifiscanservice.class
public class wifiscanservice extends service{ private static string tag="wifiscanservice"; wifimanager mainwifi; wifireceiver receiverwifi; list<scanresult> wifilist; string wifinetworkname; string userid=""; string longitude=""; string latitude=""; string terminalid=""; string wifiname=""; string timestamp=""; string sid=""; string success=""; string message=""; // session sharedpreferences spreferences; editor edit; public wifiscanservice(){ super(); } @override public void ondestroy(){ super.ondestroy(); log.i(tag, "ondestroy"); unregisterreceiver(receiverwifi); } @override public void oncreate(){ log.i(tag, "oncreate"); } @override public int onstartcommand(intent intent, int flags, int startid) { log.d("wifiscanservice","in service"); wifinetworkname = getstring(r.string.wifinetworks); mainwifi = (wifimanager) getsystemservice(context.wifi_service); receiverwifi = new wifireceiver(); registerreceiver(receiverwifi, new intentfilter(wifimanager.scan_results_available_action)); if (mainwifi.iswifienabled() == false) { // if wifi disabled enable toast.maketext(getapplicationcontext(), "wifi disabled..making enabled", toast.length_long).show(); mainwifi.setwifienabled(true); } mainwifi.startscan(); homecoming service.start_sticky; } @override public ibinder onbind(intent intent) { // todo auto-generated method stub homecoming null; } ///////////////////////////////////////////////////////////////////////////////////// class wifireceiver extends broadcastreceiver { // classes database private sqlitedatabase msqlitedatabase = null; private db_helper mdb_helper = null; // latitude , longitude gpstracker gps; string result=""; // method phone call when number of wifi connections changed public void onreceive(context c, intent intent) { spreferences = preferencemanager.getdefaultsharedpreferences(getapplicationcontext()); sid=spreferences.getstring("id",""); // location gps = new gpstracker(getapplicationcontext()); log.d("wifireceiver","in receiver"); wifilist = mainwifi.getscanresults(); for(int = 0; < wifilist.size(); i++) { // vibrator v = (vibrator)c.getsystemservice(context.vibrator_service); // vibrate 500 milliseconds // v.vibrate(500); /* arraylist<hashmap<string,string>> dbwifilist= new arraylist<hashmap<string,string>>(); open_database(); dbwifilist=db_helper.checkwififound(msqlitedatabase, db_constant.table.mywifi, db_constant.mywifi.wifiname, wifilist.get(i).ssid.touppercase().tostring()); close_database(); if(dbwifilist.size()>0) { if(gps.cangetlocation()) { double mlatitude = gps.getlatitude(); double mlongitude = gps.getlongitude(); latitude=double.tostring(mlatitude); longitude=double.tostring(mlongitude); } else { ///toast tx=toast.maketext(c,"gps disable",toast.length_short); // tx.show(); } wifiname=wifilist.get(i).ssid; terminalid=dbwifilist.get(0).get(db_constant.mywifi.terminal_id).tostring(); if(!sid.equals("")) { if(checkconnection.getinstance(getapplicationcontext()).isonline(getapplicationcontext())) { new storeuserlocationasync().execute(""); } else { toast.maketext(getapplicationcontext(), "wifi disabled..making enabled",toast.length_short).show(); } } } // toast tx=toast.maketext(c,"pingcm2c network found - " + wifilist.get(i).ssid,toast.length_short); // tx.show(); // log.d("wifireceiver","in receiver"+wifilist.get(i).ssid); */ } } public class storeuserlocationasync extends asynctask<string,string,string> { @override protected string doinbackground(string... params) { jsonparser jparser= new jsonparser(); date date = new date(); simpledateformat formatdate = new simpledateformat("mm/dd/yyyy%20hh:mm:ss"); timestamp=formatdate.format(date); string url="http://ringmyserver.com/pingm2c/rest/userservice/storeuserlocation?userid="+sid+"&longitude="+longitude+"&latitude="+latitude+"&terminalid="+terminalid+"&connectedwifiname="+wifiname+"×tamp="+timestamp+""; string data=jparser.geturldata(url); log.e("storeuserlocation","----->"+data); log.e("storeuserlocation","----->"+url); seek { jsonobject jobject = new jsonobject(data); success=jobject.getstring(ws_constant.register.success); if(success.equals("0")) { message=jobject.getstring(ws_constant.register.message); } else { message=jobject.getstring(ws_constant.register.message); } } grab (exception e) { e.printstacktrace(); } homecoming message; } @override protected void onpostexecute(string result) { toast.maketext(getapplicationcontext(),"user location update ",toast.length_short).show(); } } /* opening db */ private void open_database() { mdb_helper = new db_helper(getapplicationcontext()); msqlitedatabase = mdb_helper.getwritabledatabase(); } /* closing db */ private void close_database() { if (msqlitedatabase != null && mdb_helper != null) { msqlitedatabase.close(); mdb_helper.close(); } } } } error log
06-20 23:20:15.460: e/activitythread(10269): service com.pingm2c.wifiscanservice has leaked intentreceiver com.pingm2c.wifiscanservice$wifireceiver@40deb568 registered here. missing phone call unregisterreceiver()? 06-20 23:20:15.460: e/activitythread(10269): android.app.intentreceiverleaked: service com.pingm2c.wifiscanservice has leaked intentreceiver com.pingm2c.wifiscanservice$wifireceiver@40deb568 registered here. missing phone call unregisterreceiver()? 06-20 23:20:15.460: e/activitythread(10269): @ android.app.loadedapk$receiverdispatcher.<init>(loadedapk.java:820) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.loadedapk.getreceiverdispatcher(loadedapk.java:614) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.contextimpl.registerreceiverinternal(contextimpl.java:1312) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.contextimpl.registerreceiver(contextimpl.java:1299) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.contextimpl.registerreceiver(contextimpl.java:1293) 06-20 23:20:15.460: e/activitythread(10269): @ android.content.contextwrapper.registerreceiver(contextwrapper.java:341) 06-20 23:20:15.460: e/activitythread(10269): @ com.pingm2c.wifiscanservice.onstartcommand(wifiscanservice.java:84) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.activitythread.handleserviceargs(activitythread.java:2723) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.activitythread.access$1900(activitythread.java:139) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.activitythread$h.handlemessage(activitythread.java:1335) 06-20 23:20:15.460: e/activitythread(10269): @ android.os.handler.dispatchmessage(handler.java:99) 06-20 23:20:15.460: e/activitythread(10269): @ android.os.looper.loop(looper.java:156) 06-20 23:20:15.460: e/activitythread(10269): @ android.app.activitythread.main(activitythread.java:5005) 06-20 23:20:15.460: e/activitythread(10269): @ java.lang.reflect.method.invokenative(native method) 06-20 23:20:15.460: e/activitythread(10269): @ java.lang.reflect.method.invoke(method.java:511) 06-20 23:20:15.460: e/activitythread(10269): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:784) 06-20 23:20:15.460: e/activitythread(10269): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:551) 06-20 23:20:15.460: e/activitythread(10269): @ dalvik.system.nativestart.main(native method) android service broadcastreceiver
No comments:
Post a Comment