Frage

Meine Anwendung benötigt Internet-Verbindung. Es scheint, als wenn ich mein iPhone im Leerlauf für eine Weile halten schaltet er seine 3G-Verbindung nach unten. Sobald ich es nach oben (zu Entriegeln) und betreibe meine Anwendung aufwachen, kann es nicht mit dem Internet verbinden. Ich habe erste Youtube oder Safari laufen, dann ist es die Internetverbindung bekommt, dann muss ich Youtube / Safari heruntergefahren und dann kann ich meine Anwendung verwenden, um meinen Dienst anzumelden.

Könnten Sie bitte lassen Sie mich wissen, wie kann ich 3G-Verbindung aus meiner Anwendung aktivieren (so dass ich meine Anwendung verwenden können direkt nachdem sie aus dem Ruhezustand aufwacht und ich habe keine andere Anwendungen wie Youtube / Safari laufen?

Danke.

War es hilfreich?

Lösung

Um den Leerlaufzeitgeber zu deaktivieren, werfen Sie einen Blick auf die idleTimerDisabled Eigenschaft der UIApplication Klasse.

Von Apple:

  

Der Standardwert dieser Eigenschaft ist   NEIN. Bei den meisten Anwendungen haben keine   berührt als Benutzereingabe für eine kurze   Zeit, legt das System das Gerät   in einen „Schlaf“ Zustand, in dem der Bildschirm   dimmt. Dies wird für die Zwecke getan von   Einsparen von Energie. Jedoch,   Anwendungen, die haben Benutzer nicht   Eingang mit Ausnahme der   Beschleunigungsmesser-Spiele, zum Beispiel-Dose,   durch diese Eigenschaft auf JA einstellen,   Deaktivieren Sie die „Leerlaufzeitgeber“ zur Abwendung   System schlafen.

     

Wichtig: Sie sollten diese eingestellt   Eigenschaft nur bei Bedarf und sollte   sicherzustellen, dass es auf NO zurückgesetzt werden, wenn die   müssen nicht mehr existiert. Die meisten   Anwendungen sollten das System lassen   drehen Sie den Bildschirm, wenn der Leerlauf ab   Timer abgelaufen ist. Dazu gehören Audio   Anwendungen. Bei entsprechender Verwendung von   Audio Session Dienstleistungen, Wiedergabe und   Aufzeichnung geht ohne Unterbrechung, wenn   der Bildschirm wird ausgeschaltet. Das einzige   Anwendungen, die die Deaktivierung sollte   Leerlaufzeitgeber sind Mapping-Anwendungen,   Spiele oder ähnliche Programme mit   sporadische Interaktion mit dem Benutzer.

Andere Tipps

Es gibt offensichtlich eine andere bessere Lösung, aber man konnte eine leere Seite mit geladen werden:

[NSString stringWithContentsOfUrl ... ]

Die Verbindung hergestellt wird, wenn es notwendig ist.

Nur NSURLConnection (und alle APIs, die auf ihn geschichtet sind) neu initialisiert die Datenverbindung nach Erwachen aus dem Schlaf. Neu initialisiert die Datenverbindung einen Dummy-NSURLConnection auf eine nicht-lokale Adresse erstellen und kündigen Sie es sofort; dann wird die socket API wie erwartet.

Es gibt einen Post auf den Entwicklerforen, in denen ein Apple-Entwickler dies im Detail erklärt (aber ich kann es zur Zeit nicht finden)

Sind Sie sicher, dass Sie die Verbindung korrekt sind establising? Meine Anwendung macht die gleiche Sockets und es hat keine Probleme, die Verbindung nach Gerät Schlaf wieder herzustellen. Verwenden Erreichbarkeits API in Systemconfiguration Rahmen informiert werden, wenn Abdeckung verfügbar ist und nach, dass Ihr Verbindungsversuch machen. Beachten Sie, dass eine Zeitperiode - von einigen Sekunden bis einige Minuten - verstreichen muss, nachdem das Gerät aufwacht Internet-Konnektivität zu gewinnen, so geduldig sein.

Es gibt Erreichbarkeits Probe von Apple, suchen auch für die Erreichbarkeit Stackoverflow und Sie werden mehr Hinweise finden, wie es zu implementieren.

Eigentlich Sie das gleiche Problem, wenn Sie die Netzwerkeinstellungen auf Ihrem Telefon zwischen Start der Anwendung ändern. Zum Beispiel lassen Sie uns sagen, dass Sie die WLAN-Verbindung verwenden, wenn Sie die App starten. Dann Sie die App schließen und das WIFI abschalten, so dass das Gerät des Carriers Netzwerk verwendet. Wenn Sie die App die Socket Relaunch in der Lage, keine Verbindung herstellen, wenn Sie den Trick mit dem Dummy NSURLConnection tun (oder Sie starten den Browser vor lanuching die app).

Auch die NSURLConnection Cancelling direkt nach dem Initialisieren (mit connectionWithRequest oder initWithRequest) nicht für mich arbeiten. Entweder sie nicht die Anforderung abbrechen oder einige Zeit warten, bevor es Cancelling (zum Beispiel mit perform: withobject: afterDelay:).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top