2009-04-28 14 views
2

Meine Anwendung benötigt Internetverbindung. Es sieht so aus, als ob ich mein iPhone für eine Weile im Leerlauf halte, um die 3G-Verbindung zu beenden. Sobald ich es aufwecke (zum Entsperren rutsche) und meine Anwendung ausführen, kann es keine Verbindung zum Internet herstellen. Ich muss zuerst Youtube oder Safari starten, dann wird die Internetverbindung hergestellt, dann muss ich Youtube/Safari herunterfahren und dann kann ich meine Anwendung benutzen, um mich bei meinem Dienst anzumelden.iPhone 3G Verbindung aktivieren

Könnten Sie mir bitte mitteilen, wie ich die 3G-Verbindung von meiner Anwendung aus aktivieren kann (damit ich meine Anwendung direkt nach dem Aufwachen nutzen kann und keine anderen Anwendungen wie Youtube/Safari ausführen muss?

Dank

Antwort

2

Um den Leerlauftimer zu deaktivieren, werfen Sie einen Blick auf die idleTimerDisabled property der UIApplication-Klasse.

Von Apple:

Der Standardwert dieser Eigenschaft ist NO. Wenn die meisten Anwendungen keine Berührungen als Benutzereingabe für einen kurzen Zeitraum haben, versetzt das System das Gerät in einen "Schlaf" -Zustand, in dem der Bildschirm dimmt. Dies geschieht für die Zwecke der Strom sparen. Allerdings Anwendungen, die die „Leerlaufzeitgeber“ zu System Schlaf verhindern keine User Eingang mit Ausnahme der Beschleunigungsmesser-Spiele, für instanz kann, indem diese Eigenschaft auf YES, haben zu deaktivieren.

Wichtig: Sie sollten diese Eigenschaft nur bei Bedarf und sollte sicher sein, es auf NO zurückgesetzt werden, wenn die müssen nicht mehr existiert. Die meisten Anwendungen sollten das System den Bildschirm ausschalten, wenn der Leerlauf Timer abläuft. Dazu gehören Audio Anwendungen. Bei entsprechender Verwendung von Audio Session Services wird die Wiedergabe und Aufnahme ununterbrochen fortgesetzt, wenn der Bildschirm ausgeschaltet wird. Die einzigen Anwendungen, die den Leerlauftimer deaktivieren sollten, sind Anwendungen, Spiele oder ähnliche Programme mit sporadischer Benutzerinteraktion .

+0

Danke für deine Antwort Martin. Dies löst das ursprüngliche Problem nicht. Ich muss noch youtube/safari Art Anwendung starten, die 3G-Verbindung ermöglicht, und dann kann ich meine Anwendung ausführen. Darüber hinaus wird diese Methode auch iPhone-Energie verbrauchen. – ebaccount

+0

Was verwenden Sie, um eine Verbindung zu Ihrer Anwendung herzustellen? Wenn meine Anwendung gestartet wird und ich sofort auf das Internet zugreife, rufe ich eine externe Site an. –

+0

Ich verwende Socket-Funktionen wie connect (...), die die 3G-Verbindung nicht aktiviert. Könnten Sie mir bitte mitteilen, welche API Sie verwenden, um Anrufe zu Ihrer externen Website zu tätigen? Ich denke, dass die API die 3G-Verbindung aktiviert. – ebaccount

2

es gibt offensichtlich eine andere bessere Lösung, aber man konnte eine leere Seite mit laden:..

[NSString stringWithContentsOfUrl ... ] 

Die Verbindung hergestellt wird, wenn es notwendig ist,

+0

Könnten Sie uns bitte die API wissen lassen? – ebaccount

+0

@raihan - was meinst du mit API hier? führe einfach remys Code aus: [NSString stringWithContentsOfUrl ...] um wieder auf das Internet zuzugreifen – Raj

0

Sind Sie sicher, dass Sie die Verbindung korrekt herstellen? Meine Anwendung tut das gleiche mit Sockets und es hat keine Probleme, die Verbindung nach dem Schlaf wieder herzustellen. Verwenden Sie die Erreichbarkeits-API im Systemkonfigurations-Framework, um benachrichtigt zu werden, wenn die Abdeckung verfügbar ist, und führen Sie danach den Verbindungsversuch durch. Beachten Sie, dass ein Zeitraum von einigen Sekunden bis zu einigen Minuten verstreichen muss, nachdem das Gerät erwacht ist, um eine Internetverbindung herzustellen. Seien Sie also geduldig.

Es gibt Erreichbarkeitsstichprobe von Apple, Suche stackoverflow für Erreichbarkeit und Sie finden mehr Hinweise, wie Sie es implementieren.

1

Nur NSURLConnection (und alle APIs, die darüber geschichtet sind) initialisiert die Datenverbindung nach dem Aufwachen aus dem Ruhezustand neu. Um die Datenverbindung neu zu initialisieren, erstellen Sie einen Dummy NSURLConnection an eine nicht lokale Adresse und brechen Sie sie sofort ab; dann wird die socket API wie erwartet funktionieren.

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)

+0

Ja, das hat bei mir funktioniert. Können Sie mir jetzt mitteilen, was Sie mit einer nicht-lokalen Adresse meinen, und wie kann ich die NSURLConnection sofort abbrechen? Ich muss nicht die Anfrage senden, um die Dummy-Seite (sagen google.ca) abzurufen? – ebaccount

+0

Lokale Adressen liegen in einem der folgenden Bereiche: 10.x.x.x, 169.254.x.x, 172.16.x.x bis 172.31.x.x und 192.168.x.x; oder eine Adresse, die zu einer IP in diesem Bereich aufgelöst wird (DNS-Anforderungen werden zwischengespeichert, sodass Sie nicht garantieren können, dass sie die Datenverbindung aufheben). Zum Abbrechen senden Sie die Nachricht -cancel an eine Verbindung, die mit + initialisiert wurde [NSURLConnection connectionWithRequest: delegate:] (oder alloc, initWith ..., starten und dann separat abbrechen) – rpetrich

0

Eigentlich erhalten Sie das gleiche Problem, wenn Sie die Netzwerkeinstellungen ändern Ihr Telefon zwischen den Starts der Anwendung. Nehmen wir zum Beispiel an, dass Sie beim Start der App die WLAN-Verbindung verwenden. Dann schließen Sie die App und schalten das WLAN aus, damit das Gerät das Netzwerk des Mobilfunkanbieters nutzt. Wenn Sie die App neu starten, kann der Socket keine Verbindung herstellen, es sei denn, Sie führen den Trick mit dem Dummy NSURLConnection durch (oder Sie starten den Browser, bevor Sie die App neu starten).

Auch das Abbrechen der NSURLConnection gleich nach der Initialisierung (mit connectionWithRequest oder initWithRequest) hat nicht für mich funktioniert. Entweder die Anfrage nicht abbrechen oder einige Zeit warten, bevor sie abgebrochen wird (z. B. mit performSelector: withObject: afterDelay :).

Verwandte Themen