Android AltBeacon Hintergrund-Service Bis Hin

Arbeite ich an einer bluetooth-app mit der AltBeacon Bibliothek. Es scheint, dass nur auf die Instanz des BeaconManager ist pro Anwendung zulässig. Das problem, das ich bin vor ist dieses: ich will einen ständig im hintergrund Laufenden Dienst, der ständig macht bluetooth gefächert und sendet Benachrichtigungen. Wenn ich meinen app (bring es in den Vordergrund zu stellen) ich war der service zum anhalten reichen. Die Vordergrund-Aktivität werden dann reichen, und zeigen Sie die Inhalte auf dem Bildschirm.

Das problem ist, dass die beacons-manager (aus BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);) in der Aktivität und der service ist der gleiche Instanz. Also, wenn die activity geschlossen wird, beaconManager.unbind(this); aufgerufen wird, und der Bereich notifier im service nicht mehr feuert.

Ist es möglich, zwei separate Instanzen der beacon-manager? Wenn nicht, wie kann ich tun, bis hin zu einem kontinuierlichen Betrieb-service und eine Aktivität?

RangingActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
...
regionEstimote = new Region("estimote", null, null, null);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
@Override
protected void onDestroy() {
    super.onDestroy();
    notificationManager.cancel(NOTIFICATION_ID);
    //beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
    beaconManager.setRangeNotifier(new RangeNotifier() {
        ....
    });
    try {
        beaconManager.startRangingBeaconsInRegion(regionEstimote);
    } catch (RemoteException e) {
        Log.e(TAG, "RangingActivity", e);
    }
}

BeaconService.java

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(beaconHistory == null)
        beaconHistory = new HashMap<Integer, Date>();

    mBeaconManager = BeaconManager.getInstanceForApplication(this);
    mBeaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));

    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    beaconHistory = null;
    mBeaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
    mBeaconManager.setRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
            if(ActivityBase.isActivityVisible()) {   //don't do ranging logic if any activity from my app is in the foreground
                return;
            }
            ...
        }
    });

    try {
        mBeaconManager.startRangingBeaconsInRegion(regionMint);
    } catch (RemoteException e) {
        Log.e(TAG, "BeaconService", e);
    }
}
InformationsquelleAutor mashrur | 2014-10-28
Schreibe einen Kommentar