android - iBeacon Ranging Service Not Returning any Beacons -


i working ibeacon technology, , trying create rangingservice search nearby ibeacons every 5 seconds , run in background of application. code below not working. i'm sure i'm making dumb mistake somewhere, can see in log files checkpoint 3 , 4 being reached every 5 seconds, while checkpoints 1 , 2 never being reached. thus, nearby beacons not being detected. don't have experience services or beacons, appreciate help, @davidgyoung.

please forgive me if code below isn't indented :) can me.

import android.app.service; import android.content.intent; import android.os.handler; import android.os.ibinder; import android.os.message; import android.os.remoteexception; import android.util.log; import android.widget.edittext; import android.widget.toast;  import org.altbeacon.beacon.beacon; import org.altbeacon.beacon.beaconconsumer; import org.altbeacon.beacon.beaconmanager; import org.altbeacon.beacon.rangenotifier; import org.altbeacon.beacon.region;  import java.util.collection;  public class rangingservice extends service implements beaconconsumer { private beaconmanager beaconmanager = beaconmanager.getinstanceforapplication(this); handler handler; string b = "";  @override     public ibinder onbind(intent arg0) {         return null;     }  @override public void onstart(intent intent, int startid) {     // let continue running until stopped.     log.d("service", "started");      handler = new handler(){          @override             public void handlemessage(message msg) {                 // todo auto-generated method stub                 super.handlemessage(msg);                 log.d("checkpoint", "5 seconds have passed");             }          };          new thread(new runnable(){             public void run() {                 // todo auto-generated method stub                 while(true)                 {                     try {                         startjob();                         log.d("checkpoint", "job has started");                         thread.sleep(5000);                         handler.sendemptymessage(0);                      } catch (interruptedexception e) {                         // todo auto-generated catch block                         e.printstacktrace();                     }                  }              }         }).start();             //return start_sticky;     }  public void startjob() {     beaconmanager.bind(this);     log.d("the first beacon", "starting job realzies");     onbeaconserviceconnect(); }       @override     public void ondestroy() {         super.ondestroy();         log.d("service", "ended");     }  @override public void onbeaconserviceconnect() {     log.d("checkpoint3", "checkpoint3");     beaconmanager.setrangenotifier(new rangenotifier() {         @override         public void didrangebeaconsinregion(collection<beacon> beacons, region region) {             log.d("checkpoint1", "checkpoint1");             if (beacons.size() > 0) {                 log.d("checkpoint2", "checkpoint2");                 //edittext edittext = (edittext)rangingactivity.this.findviewbyid(r.id.rangingtext);                 beacon firstbeacon = beacons.iterator().next();                 string = "the first beacon " + firstbeacon.tostring() + " " + firstbeacon.getdistance() + " meters away. rssi = " + firstbeacon.getrssi();                 log.d("service", a);                 //logtodisplay(a);             }         }      });      try {         beaconmanager.startrangingbeaconsinregion(new region("myranginguniqueid", null, null, null));         log.d("checkpoint4", "checkpoint4");      } catch (remoteexception e) {   }  } }// update code formatting 

main activity:

public void didenterregion(region arg0) {     // in example, class sends notification user whenever   beacon     // matching region (defined above) first seen.     log.d(tag, "did enter region.");     startservice(new intent(this, rangingservice.class));  } 

a few tips:

  1. don't call onbeaconserviceconnect(); manually. callback method gets called android beacon library when beacon scanning service ready go result of call beaconmanager.bind(this); if call yourself, defeat purpose, , cause problems.

  2. you should not call beaconmanager.bind(this); every 5 seconds -- call once when service starts up. calling repeatedly cause problems.

  3. make sure android beacon library configured types of beacons using. default detect open source altbeacon packets. if using proprietary beacon type, need create beaconparser , add configure library. can google search "beaconparser" , proprietary beacon type proper line of code configure library.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

c++ - Clear the memory after returning a vector in a function -

erlang - Saving a digraph to mnesia is hindered because of its side-effects -