android - Can I listen for Eddystone beacons when my app is not running? -


with google's new eddystone standard providing support android in google play services nearby api. can register eddystone beacons , have our app receive intent if app not running?

yes, possible using android beacon library, has full support eddystone.

the mechanism background launching of app works same way on eddystone other kinds of beacons supported library. use regionbootstrap object in custom application class. can read details how works here.

the difference eddystone have set beaconparser decodes eddystone-uid frame, , set region match eddystone namespace id:

public class myapplicationname extends application implements bootstrapnotifier {     private static final string tag = ".myapplicationname";     private regionbootstrap regionbootstrap;      @override     public void oncreate() {         super.oncreate();         log.d(tag, "app started up");         beaconmanager beaconmanager = beaconmanager.getinstanceforapplication(this);         // detect main identifier (uid) frame:         beaconmanager.getbeaconparsers().add(new beaconparser().setbeaconlayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));          // wake app when beacon matching myeddystonenamespaceid seen          myeddystonenamespaceid = identifier.parse("0x2f234454f4911ba9ffa6");         region region = new region("com.example.myapp.boostrapregion", myeddystonenamespaceid, null, null);         regionbootstrap = new regionbootstrap(this, region);     }      @override     public void diddeterminestateforregion(int arg0, region arg1) {         // don't care     }      @override     public void didenterregion(region arg0) {         log.d(tag, "got didenterregion call");         // call disable make activity below gets launched first time beacon seen (until next time app launched)         // if want activity launch every single time beacons come view, remove call.           regionbootstrap.disable();         intent intent = new intent(this, mainactivity.class);         // important: in androidmanifest.xml definition of activity, must set android:launchmode="singleinstance" or 2 instances         // created when user launches activity manually , gets launched here.         intent.setflags(intent.flag_activity_new_task);         this.startactivity(intent);     }      @override     public void didexitregion(region arg0) {        // don't care     }         } 

Comments