2016-11-10 1 views
0

Ich brauche Baken auf dem Hintergrund (richtig auf dem Vordergrund-Modus arbeitet) mit Altbeacons Bibliothek reichtiBeacons' Hintergrund Bereich mit Altbeacon Bibliothek

auf meinem Android-Monitor das Protokoll zeigt nie die Nachricht für die didRangeBeaconsInRegion Methode.

Auf der didEnterRegion werden die Nachrichten korrekt angezeigt.

Ich habe den folgenden Code ausprobiert, aber kein Erfolg, kann mir jemand sagen, wie es geht?

public class INBeaconApplication extends Application implements BootstrapNotifier, RangeNotifier { 
private BeaconManager beaconManager; 
private ArrayList<INBeacon> userBeaconArrayList; 
private INBeaconUser inBeaconUser; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d("INBeacon", "Application created"); 

    //BeaconManager and custom beaconParser layout 
    beaconManager = BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().clear(); 
    beaconManager.getBeaconParsers().add(new BeaconParser() 
      .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 
    beaconManager.setRegionStatePeristenceEnabled(false); 

    //Set the BeacomManager background between scan periods 
    long period = 1000 * 30; //equal to 30 seconds 
    beaconManager.setBackgroundBetweenScanPeriod(period); 

    // wake up the app when a beacon is seen 
    Region region = new Region(Utils.REGION_ID, Identifier 
      .parse(Utils.INBEACON_UUID), null, null); 
    new RegionBootstrap(this, region); 

    new BackgroundPowerSaver(this); 
} 



boolean checkPermissionForRange(){ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     return getApplicationContext().checkSelfPermission(
       Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED; 
    } 
    return true; 
} 

@Override 
public void didEnterRegion(Region region) { 
    Log.d("INBeacon", "didEnterRegion"); 
    Utils.sendNotification(this, "Test"); 
    if (checkPermissionForRange()) return; 
    Log.d("INBeacon", "permissions ok"); 
    try { 
     beaconManager.startRangingBeaconsInRegion(region); 
     Log.d("INBeacon","startRanging"); 
    } catch (RemoteException e) { 
     Log.e("INBeacon",e.getMessage()); 
    } 
} 

@Override 
public void didExitRegion(Region region) { 
    Log.d("INBeacon", "didExitRegion"); 
    try { 
     beaconManager.stopRangingBeaconsInRegion(region); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) { 
    Log.d("INBeacon", "didRangeBeaconsInRegion"); 
    ArrayList<Beacon> newBeacons = new ArrayList<>(collection); 
     .............code to do what i need with the beacons..... 
} 

Antwort

0

Es sieht aus wie der Code muss einfach anrufen:

beaconManager.setRangeNotifier(this); 
+0

David, ich hinzufügen, und es funktioniert jetzt, aber diese Methode zeigen als veraltet, ist das in Ordnung? – ClaudioBlanco

+0

auch, dies hat es so gescannt wie wenn die Anwendung geöffnet ist, gibt es eine andere Möglichkeit, die es nur in einem Intervall suchen würde, wie wenn ich beaconManager.setBackgroundBetweenScanPeriod (Punkt); – ClaudioBlanco

+1

Entschuldigung, die nicht veraltete Version ist 'beaconManager.addRangeNotifier (this);' Sie sollten die Entfernungsmessung für 30 Sekunden auf einmal sehen, je nach Ihren Hintergrund-Scan-Einstellungen. – davidgyoung

Verwandte Themen