Ich habe mit Phonegap an einer Android-App gearbeitet und möchte sie jetzt so gestalten, dass sie beim Schließen der App weiterhin den Java / JS-Code in der App ausführen kann. Ich verstehe also, dass ich einen Service erstellen muss. Wenn ich ein Service-Plugin auf Phonegap erstelle, kann ich trotzdem den Javascript-Code oder nur Java ausführen?
Hat jemand so etwas gemacht? Ich fand diese Diskussion, schien aber nicht zu funktionieren: http://groups.google.com/group/phonegap/browse_thread/thread/722b0e796baa7fc6 Das ist also alles, was ich jetzt habe.
Bevor ich mich der Entwicklung von Native zuwende, wenn ich es nicht herausfinden kann, dachte ich, ich würde fragen, ob dies schon jemand getan hat. Ich kann anscheinend keine der Phonegap-Plugins finden, die etwas Ähnliches tun.
BEARBEITEN: Ich habe eine App, die Java-Code als Dienst ausführt. Wenn es jedoch sendjavascript aufruft, funktioniert es nicht. Gibt es also eine Möglichkeit, den Javascript-Code auch im Hintergrund auszuführen, wenn eine App mit Phonegap geschlossen wird?
Vielen Dank
quelle
Antworten:
Nein, es ist nicht möglich, Javascript-Code im Hintergrund (zumindest meiner Meinung nach) als Dienst auszuführen. Phonegap unter Android verwendet eine spezielle Aktivität namens Droidgap , die ein WebView hostet. Dieses Browser-Steuerelement führt das JavaScript aus. Dies bedeutet, dass die JS-Ausführung nur innerhalb dieser Aktivität ausgeführt werden kann, unabhängig davon, ob sie sichtbar ist oder nicht.
Der von Google Groups verknüpfte Code versucht, einen in Java entwickelten Dienst an die DroidGap-Aktivität zu binden, sodass der Dienst NICHT in JS geschrieben ist.
Sie können einige Hintergrundaktivitäten in Ihrem JS-Code in Ihrer untergeordneten Aktivität haben, die von der DroidGap-Aktivität abgeleitet sind. Haben Sie beispielsweise einen Hintergrund-Thread in Ihrer Aktivität, haben Sie eine JS-Rückruffunktion und lassen Sie den Thread diese Rückruffunktion aufrufen.
Wenn Sie wirklich einen Dienst benötigen, müssen Sie einheimisch werden.
Update:
JS-Code kann nur mit der Droidgap-Aktivität ausgeführt werden. Eine Aktivität kann 3 Zustände haben (basierend auf dem Lebenszyklus von Aktivitäten ):
Ich habe ein Beispiel bereitgestellt, in dem ich ein Phonegap-Plugin implementiert habe. Das Plugin ermöglicht es der Aktivität, sich bei SMS_RECEIVED zu registrieren. Wenn die Aktivitäten den Gültigkeitsbereich verlassen (Ereignis beim Vorladen), wird die Registrierung aufgehoben, sodass nur Problem 1 behandelt wird.
Wenn alle drei Probleme behandelt werden sollen, müssen Sie die eingehende SMS-Absicht an die Aktivität weiterleiten. Wenn es nicht geladen ist, lädt und aktiviert das System die Aktivität automatisch. Dies ist jedoch kein Hintergrunddienst mehr. Ihre App wird sichtbar, wenn eine SMS empfangen wird.
Wenn Sie dies nicht möchten (wenn Sie wirklich einen Hintergrunddienst wünschen), müssen Sie eine native Implementierung bereitstellen.
quelle
In diesem Artikel erfahren Sie, wie Sie mit Phonegap einen Dienst für Android erstellen, der einige gute Informationen zu Ihrem Problem enthält.
Es verwendet ein großartiges Plugin, um auf einfache Weise einen Hintergrunddienst mit Phonegap zu erstellen. Sie können JS jedoch nicht verwenden
Ich habe keine Möglichkeit gefunden, JS dazu zu bringen, im Hintergrund zu laufen. ABER Sie können mit dem Plugin Parameter von Java an JS und umgekehrt übergeben ... was sehr nützlich ist. Sie müssten Ihren JS-Code jedoch immer noch in Java neu schreiben. Es sei denn, Sie haben einen bestimmten Grund, nur JS ausführen zu lassen? (Aber es sollte nicht geben ...)
Hoffe, dass dies für einige Besucher dieser Seite nützlich sein könnte.
quelle
JA, und es ist sehr einfach ... installieren Sie einfach das Plugin backgroundJS:
https://build.phonegap.com/plugins/430
Sie können Javascript im Hintergrund ausführen und in Kombination mit dem lokalen Benachrichtigungs-Plugin jederzeit Benachrichtigungen an den Benutzer senden. Beachten Sie jedoch, dass der Akku dadurch schneller leer wird. Beachten Sie auch, dass dies möglicherweise der Fall ist Erstellen Sie ein Problem mit der iOS-Richtlinie. Viel Glück!!!
quelle
SetBackgroundSeconds
Methode auf ungefähr 300 Sekunden einzustellen , aber es hat auch nicht funktioniert. Die Konsole stoppt die Protokollierung nach ungefähr 180 Sekunden.Sie können versuchen, das Plugin Cordova-Plugin-Hintergrund-Modus hinzuzufügen
Aber wie der Autor sagt:
Unendliche Hintergrundaufgaben werden auf den meisten mobilen Betriebssystemen nicht offiziell unterstützt und sind daher nicht mit Anbietern öffentlicher Geschäfte kompatibel. Eine erfolgreiche Einreichung ist nicht garantiert. Verwenden Sie das Plugin auf eigenes Risiko!
quelle