2017-07-14 5 views
0

Ich wurde beauftragt, etwas Code zu reparieren, der Altbeacon mit iBeacons verwendet. Die Erkennung von Beacons funktioniert gut im Vordergrund, aber nicht im Hintergrund.Verwirrt über RegionBootstrap und wann es zu verwenden ist

In der Aktivität, die in Vordergrundmodus abtastet, auf Eingabe Hintergrund wird die OnStop vom beaconmanager unbind verwendet und dann ein Verfahren, in dem beaconBkgService wie dies nennt:

Aktivitätscode:

protected void onStop() { 

    super.onStop(); 

    try { 
     // Do we need to unbind???? 
     iBeaconManager.unbind(this); 

     beaconBkgService.startScanning(); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     } 

} 

beaconBkgService Code:

public class beaconBkgService extends Application implements BootstrapNotifier { 

    public void startScanning() { 

     try { 

      mBeaconManager = BeaconManager.getInstanceForApplication(this); 
      mBeaconManager.setBackgroundBetweenScanPeriod(3000L); 
      mBeaconManager.setBackgroundScanPeriod(1000L); 

      mBeaconManager.setBackgroundMode(true); 

      if (mRegionBootstrap == null){ 
       mAllBeaconsRegion = new ArrayList<Region>(); 

       for (UserBeacons userBeacon : userBeacons) { 

        mBeaconsRegion = new Region(userBeacon.identifier, userBeacon.UUID, null, null); 
        mAllBeaconsRegion.add(mBeaconsRegion); 
       } 
       mRegionBootstrap = new RegionBootstrap(this, mAllBeaconsRegion); 
      } 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Sollte die Aktivität OnStop den Beacon-Manager unbind() aufrufen vor beaconBkgService.startScanning Aufruf () Ich habe es mit und ohne versucht aber kann nichts arbeiten.

Das gewünschte Ergebnis ist, dass wenn die App in den Hintergrund geht, der Scan für 1 Sek. Alle 3 Sek. Dauern sollte, aber die BeaconBkgService didEnterRegion nicht feuert, wenn ein Beacon eingeschaltet ist und die App im Hintergrund ist.

Und wenn ich das zum Laufen bekomme, wie wird die ExitRegion ausgeführt, wenn die Aktivität den Beacon im Vordergrund erkennt, dann schaltet der Benutzer in den Hintergrund und verlässt den Beacon-Bereich? Wird die onExitRegion im beaconBkgService ausgelöst? Ist der Status von Vordergrund zu Hintergrund mit RegionBootstrap?

Antwort

0

Die RegionBootstrap und BootstrapNotifier sind nicht für die Verwendung mit Android Activity vorgesehen. Sie sollten stattdessen mit einer Android Application Klasse oder einem anderen Objekt verwendet werden, das für die Lebensdauer der Android App existiert.

Verstehen Sie, dass im Android-Lebenszyklus Aktivitäten erstellt und zerstört werden, wenn der Benutzer in der App navigiert. Jeder Code, der in einer Aktivität einen Langzeit-Beacon-Scan durchführen möchte, funktioniert einfach nicht.

Das Anwendungsobjekt wird dagegen erstellt, wenn der Benutzer die App zum ersten Mal startet (oder wenn die App von der ersten Beacon-Erkennung automatisch gestartet wird) und weiterhin vorhanden ist.

Der einfachste Weg, um diesen Code zu beheben, ist es neu schreiben, um eine Application Klasse zu verwenden. Im Beispielcode für die Android Beacon-Bibliothek finden Sie ein Beispiel dafür. Siehe die Start App im Hintergrund Abschnitt hier: http://altbeacon.github.io/android-beacon-library/samples.html

Sie wahrscheinlich auch den Code in dem Auto Batteriesparbeispielcode Abschnitt derselben Seite verwenden möchten.

+0

Danke für die Antwort. Der Hintergrundscan erfolgt in einer anderen Klasse. Public class beaconBkgService erweitert die Anwendung implementiert BootstrapNotifier, so dass es OK sein sollte? – newbie101

Verwandte Themen