i'm using estimote sdk monitor bluetooth pings when entering , exiting regions. working correctly when had scanning , notification code in activity, app no longer in foreground stopped. i'm trying set service bluetooth scanning carries on in background until click button stop it. have activity , service classes below when try debug app not starting scanning process, message:
i/estimotesdk: com.estimote.sdk.service.beaconservice.oncreate:305 creating service d/bluetoothadapter: 811314615: getstate() : mservice = null. returning state_off
for reason don't think service starting properly, i'm trying figure out why. using intentservice correctly, know stops when work done, scanning process loop shouldn't finish unless explicitly tell component. using correct type of service?
here's code:
// mainactivity.java import android.app.notification; import android.app.notificationmanager; import android.app.pendingintent; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.os.bundle; import android.support.design.widget.floatingactionbutton; import android.support.design.widget.snackbar; import android.support.v4.content.localbroadcastmanager; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.view.view; import android.view.menu; import android.view.menuitem; import android.widget.toast; public class mainactivity extends appcompatactivity { // bool deal 2 listen requests (not implemented yet) private static boolean listening = false; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); floatingactionbutton fab = (floatingactionbutton) findviewbyid(r.id.fab); broadcastreceiver mmessagereceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { // data included in intent string message = intent.getstringextra("message"); if (message.equals("entered_region")) { shownotification("welcome..","to access lab!"); } else if(message.equals("exited_region")) { shownotification("you've left lab..", "goodbye!"); } } }; localbroadcastmanager.getinstance(this).registerreceiver(mmessagereceiver, new intentfilter("listen")); // long click listener enabling background monitoring fab.setonlongclicklistener(new view.onlongclicklistener() { @override public boolean onlongclick(view view) { intent myintent = new intent(mainactivity.this, backgroundservice.class); startservice(myintent); toast.maketext(mainactivity.this, "service starting..", toast.length_short).show(); // snackbar.make(view, "bluetooth authentication on", snackbar.length_long) // .setaction("action", null).show(); return true; } }); // click listener disable background monitoring fab.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { intent stopintent = new intent(mainactivity.this, backgroundservice.class); stopservice(stopintent); toast.maketext(mainactivity.this, "service ended..", toast.length_short).show(); // snackbar.make(view, "bluetooth authentication turned off", snackbar.length_long) // .setaction("action", null).show(); } }); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } public void shownotification(string title, string message) { intent notifyintent = new intent(this, mainactivity.class); notifyintent.setflags(intent.flag_activity_single_top); pendingintent pendingintent = pendingintent.getactivities(this, 0, new intent[] { notifyintent }, pendingintent.flag_update_current); notification notification = new notification.builder(this) .setsmallicon(android.r.drawable.ic_dialog_info) .setcontenttitle(title) .setcontenttext(message) .setautocancel(true) .setcontentintent(pendingintent) .build(); notification.defaults |= notification.default_sound; notificationmanager notificationmanager = (notificationmanager) getsystemservice(context.notification_service); notificationmanager.notify(1, notification); }
.
//backgroundservice.java import com.estimote.sdk.beacon; import com.estimote.sdk.beaconmanager; import com.estimote.sdk.region; import com.estimote.sdk.systemrequirementschecker; import java.util.list; import java.util.uuid; public class backgroundservice extends intentservice { private beaconmanager beaconmanager; private region region; // default empty constructor public backgroundservice() { super("backgroundservice"); } @override protected void onhandleintent(intent workintent) { beaconmanager.setmonitoringlistener(new beaconmanager.monitoringlistener() { @override public void onenteredregion(region region, list<beacon> list) { intent localintent = new intent("listen"); localintent.putextra("message", "entered_region"); localbroadcastmanager.getinstance(getapplicationcontext()).sendbroadcast(localintent); } @override public void onexitedregion(region region) { intent localintent = new intent("listen"); localintent.putextra("message", "exited_region"); localbroadcastmanager.getinstance(getapplicationcontext()).sendbroadcast(localintent); } }); } @override public void oncreate() { super.oncreate(); beaconmanager = new beaconmanager(getapplicationcontext()); region = new region("ranged region", uuid.fromstring("b9407f30-f5f8-466e-aff9-25556b57fe6d"), 32905, 62058); beaconmanager.connect(new beaconmanager.servicereadycallback() { @override public void onserviceready() { beaconmanager.startmonitoring(region); } }); } @override public void ondestroy() { // beaconmanager.disconnect(); super.ondestroy(); stopself(); } }
Comments
Post a Comment