2013-04-08 16 views
7

Ich habe eine einfache Web-App mit Phonegap und Android gebaut, die externe Ressourcen (js, css, html) vom Server aufrufen, statt sie im Phonegap-Assets-Ordner zu speichern. Ich bevorzuge externe Ressourcen, da mein Server HTML-Seiten liefern kann, die die Internationalisierung übernehmen.HTML5 Android Phonegap Web App funktioniert nicht offline mit Cache-Manifest

Diese Web-App funktioniert gut auf meinem Android-Gerät, wenn WIFI eingeschaltet ist, aber es scheitert beim Stoppen von WIFI. Meine von meinem Server ausgelieferte Datei index.html enthält eine gültige Manifestdatei mit korrektem MIME-Typ ('text/cache-manifest'), die alle Dateien auflistet, die die App benötigt.

Meine Android Aktivitätsklasse soll Caching haben aktivieren:

this.appView.getSettings().setDomStorageEnabled(true); 
    this.appView.getSettings().setAppCacheMaxSize(1024 * 1024 * 15); 

    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); 
    this.appView.getSettings().setAppCachePath(appCachePath); 
    this.appView.getSettings().setAllowFileAccess(true); 
    this.appView.getSettings().setAppCacheEnabled(true); 

Es kann sich lohnen mentionning, dass meine app Verwendung Ajax-Aufruf mit URLs wie/aaa/bbb/Web-Seiten von Server zu nennen und I don‘ Ich weiß, ob das das Problem sein kann (ich rufe keine physischen Seiten direkt an wie index.html) ... Diese Web-App funktioniert jedoch gut im Desktop-Browser (Google Chrome), wenn offline ...

Irgendeine Idee Was kann ich noch tun, um diese HTML5-Cache-Funktion in meiner Phonegap-App zu aktivieren?

Vielen Dank

Antwort

6

Nach dem Spielen um für eine Weile ich es an die Arbeit. Hier sind einige Punkte, die Sie überprüfen sollten, wenn sie mit dieser Art von Caching-Problem stucked:

  • kümmern uns um URL-Parameter mit GET-Methode übergeben ... ich Parameter vorging, wenn zwischen den Seiten meiner App und diese Parameter Navigation machte Meine URLs unterscheiden sich von denen in der Manifestdatei, wodurch der Cache fehlschlägt.
  • Beim Testen des Offline-Modus auf meinem Handy, ich war nur das Herunterfahren des WIFI denken, das war genug, um im Cache-Version meiner App auszulösen, aber es war nicht ... Wie ich meine App unter einem lokalen Netzwerk IP (wie 192.168.2.11), es scheint, dass meine App versuchte, diese IP durch das 3G-Netzwerk zu erreichen, das immer noch eingeschaltet war ... Benutze also den Flugzeugmodus, wenn du offline testetest.
  • Nicht sicher, ob dieser notwendig war, wie ich es in einigen anderen Threads gelesen habe, aber ich meine Manifest-Datei in cache.manifest umbenannt.

Grüße

1

ich ein ähnliches System entwickle. Ich habe die Phonegap-Webseiten erstellt und im www-Ordner meines WAMP-Servers gespeichert. Was ich dann mache ist im Grunde super.LoadURL ("insert_ip_address_here/insert_name_of_folder_where_webpage_is_located") in der onCreate-Methode und das lädt die phonegap-Anwendung perfekt (ja alles was du brauchst ist nur eine Codezeile in der Android App selbst). Sie müssen jedoch immer noch sicherstellen, dass die Konfigurationsdateien config.xml, manifest und alle für den phonegap erforderlichen Konfigurationen ordnungsgemäß ausgeführt werden (Anweisungen hierzu finden Sie unter http://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CEAQFjAA&url=http%3A%2F%2Fwww.adobe.com%2Fdevnet%2Fhtml5%2Farticles%2Fgetting-started-with-phonegap-in-eclipse-for-android.html&ei=XfBuUcmKNu684AP3vYDQBw&usg=AFQjCNG16oUTDylMqz20YiiMZTlDxrfbPg&bvm=bv.45368065,d.dmg).

Lassen Sie mich wissen, ob dies der Weg, den Sie wählen, zu verfolgen. Ich kann zusätzliche Unterstützung mit Dingen wie die IP-Adresse (in der Zeile super.loadurl (...)) für das lokale System mit Multi-Casting usw. dynamisch machen.

+0

Ja, das ist im Grunde was ich mache, ich rufe meine remote index.html mit super.LoadURL (meine http url) in der onCreate-Methode. Wenn Sie meine Frage einchecken, definiere ich auch verschiedene Einstellungen, um Caching auf die gleiche Weise zu aktivieren ... –

+0

Interessant, wird das Caching die App schneller laufen lassen? (Ich denke darüber nach, es in meinem eigenen Code zu implementieren). – aagarwal