2016-04-05 12 views
0

und Entschuldigung für mein Englisch. ich arbeite mit iBeacon, und um das zu tun, verwende ich Android Beacon Library. Es ist großartig und funktioniert perfekt, aber jetzt brauche ich deine Hilfe.Custom Service und AltBeacon

Ich habe einen Thread, der starten und Informationen senden, wenn ein bestimmtes iBeacon in der Region eingeben und stoppen, wenn der iBeacon die Region verlassen. Das Problem ist, dass, wenn ich die App töte, der Thread stirbt. Ich denke über einen Dienst nach, aber ich stelle fest, dass es mit BootstrapNotifier unmöglich ist, einen anderen benutzerdefinierten Dienst zu verwenden.

Also, haben Sie irgendwelche Ideen, wie diese Aufgabe zu erreichen? Vielen Dank im Voraus für Ihren Vorschlag.

Antwort

1

Ok, ich löste es auf andere Weise. Ich benutze meinen benutzerdefinierten Service und nicht mehr BootstrapNotifier in der Anwendung zu implementieren.

Hier ist mein Code, wenn jemand es braucht.

public class BeaconDetector extends Service implements BeaconConsumer { 

private static final String TAG = "BeaconDetector"; 

private BeaconUtility.BeaconObject beaconObject; 

private Context getServiceCtx(){ 
    return BeaconDetector.this; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    IMLog.e(TAG, "Created."); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    IMLog.e(TAG, "Start."); 

    beaconObject = BeaconUtility.instantiateBeaconManager(this); 
    beaconObject.beaconManager.bind(this); 

    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    IMLog.e(TAG, "Destroy."); 
    beaconObject.beaconManager.unbind(this); 
} 


@Override 
public void onBeaconServiceConnect() { 
    IMLog.e(TAG, "Connected."); 

    beaconObject.beaconManager.setMonitorNotifier(new MonitorNotifier() { 
     @Override 
     public void didEnterRegion(Region arg0) { 
      // In this example, this class sends a notification to the user whenever a Beacon 
      // matching a Region (defined above) are first seen. 
      IMLog.e(TAG, "did enter region."); 
      Sender.getInstance(getServiceCtx()).startSender(); 
     } 

     @Override 
     public void didExitRegion(Region region) { 
      IMLog.e(TAG, "did exit region."); 
      if (Sender.getInstance(getServiceCtx()).isAlive()) { 
       Sender.getInstance(getServiceCtx()).stopSender(); 
      } 
     } 

     @Override 
     public void didDetermineStateForRegion(int state, Region region) { 
      IMLog.e(TAG, "did enter region."); 
     } 
    }); 

    try { 
     beaconObject.beaconManager.startMonitoringBeaconsInRegion(BeaconUtility.getMonitoringRegion()); 
    } catch (RemoteException e) { 
     IMLog.e(TAG, "Remote Exception."); 
    } 

} 

}

+0

Glad gelöst Sie es! Dies ist ein besserer Ansatz als die Verwendung des RegionBootstrap, der wirklich für den Einsatz in einer 'Application'-Klasse gedacht ist. – davidgyoung