2016-08-09 152 views
0

Ich versuche Beacons zu hören, wenn die App auf Android geschlossen (getötet) wird (Taskmanager abgewischt).Altbeacon Android - EnterRegion, während App getötet wird (nicht im Hintergrund)

Ich benutze Appcelerator Titanium 5+ und für die Beacons mit dem Modul https://github.com/dwk5123/android-altbeacon-module. Die App funktioniert gut, wenn es im Hintergrund ist, aber nicht, wenn Sie es schließen. Ich habe versucht, die Altbeacon.setRunInService() -Methode einen App-Service auf Titanium zu erstellen, und es scheint nicht zu funktionieren.

Ich habe auch versucht, das Modul zu modifizieren http://altbeacon.github.io/android-beacon-library/background_launching.html zu implementieren, aber ich bin nicht in der Lage, die Application-Klasse zugreifen, da Titan auf dem Build-Prozess erzeugt. Wenn ich eine Application-Klasse erstelle und sie auf das Manifest setze, überschreibt sie meine Titanium App Application-Klasse und führt sie nicht aus.

Auch in der Modulklasse „AndroidAltbeaconModuleModule“ Ich habe versucht, die BootstrapNotifier Schnittstelle und die Methoden zu implementieren: didDetermineStateForRegion, didEnterRegion und didExitRegion. Dann auf onAppCreate Methode versucht zu implementieren:

Region region = new Region("My Region", Identifier.parse(
"00000000-0000-0000-0000-000000000001"), null, null); 
regionBootstrap = new RegionBootstrap(this, region); 

aber this auf regionBootstrap Konstruktor nicht statisch ist und bekam eine Fehlermeldung darüber.

Zweitens habe ich versucht, eine nicht-statische Methode zu erstellen und diesen Code aus dem Modul aufzurufen. Es wird BootstrapNotifier-Ereignissen erfolgreich angehört, aber nicht, wenn die App beendet wird, nur im Hintergrund. Liegt das daran, dass sich der regionBootstrap nicht in der onCreate-Methode der Application-Klasse befindet? Ich habe diese Frage Using the AltBeacon library without extending Application und diese Implementing BootstrapNotifier on Activity instead of Application class sowie überprüft, wo Davidgyoung (Schöpfer der Altbeacon lib) gab eine gute Antwort, aber nicht möglich (zumindest für mich) mit Titanium implementiert werden.

Ist die einzige Möglichkeit, ein Beacon mit App mit dieser Anwendungsfunktionalität getötet zu bemerken? Ich habe ein wenig versucht, einen JobService und einen BroadcastReceiver im Modul zu implementieren, aber ich bin kein so guter Java/Android Entwickler und das könnte eine Menge Zeit brauchen. Hat jemand eine extra Idee? Bitte teilen Sie es =)

Vielen Dank im Voraus!

Antwort

0

Ich bin kein Titan-Experte, aber ich habe zwei Vorschläge:

  1. Könnten Sie machen eine Application Klasse, die erstreckt derjenige von Titan erzeugt, und dann AndroidManifest.xml ändern zu verwenden Ihre Anwendungsklasse? Wenn Sie dies tun können, können Sie RegionBootstrap in Ihrer Klasse 'onCreate Methode erstellen und dann super.onCreate() aufrufen, um das auszuführen, was auch immer Titanium tut.

  2. Die einzige Möglichkeit, die Logik in Ihrem "AndroidAltbeaconModuleModule" zu verwenden, ist, wenn der Code dieses Moduls sofort beim Start der App im Hintergrund ausgeführt wird (z. B. nach Empfang von RECEIVE_BOOT_COMPLETED, wenn das Telefon startet). Es wird an dieser Stelle keine Benutzeroberfläche geben. Wenn dies in der Tat funktioniert, ist es möglich, aber Sie müssen irgendwie Zugang zu einem Android Context Objekt in Titanium erhalten, und daraus eine neue native Java-Klasse erstellen, die alle Methoden von BootStrapNotifier implementiert.

Es gibt immer andere Möglichkeiten, dies zu tun. Die RegionBootstrap ist dafür ausgelegt, dies relativ schmerzlos zu machen. Wenn Sie es aufgrund der Einschränkungen von Titanium nicht verwenden können, müssen Sie einige von dem, was es von Grund auf neu zu erstellen, die mindestens ein natives BroadcastReceiver schreiben müssen.