Question

Mon application nécessite une connexion Internet. Il semble que si je garde mon iPhone inactif pendant un moment, il ferme sa connexion 3G. Une fois réveillé (diapositive à déverrouiller) et exécuté, mon application ne peut plus se connecter à Internet. Je dois d'abord utiliser Youtube ou Safari, puis la connexion Internet est établie, puis je dois fermer Youtube / Safari, puis je peux utiliser mon application pour me connecter à mon service.

Pourriez-vous s'il vous plaît laissez-moi savoir comment puis-je activer la connexion 3G à partir de mon application (afin que je puisse utiliser mon application directement après qu'elle soit sortie de l'état de veille et que je n'ai pas besoin d'exécuter d'autres applications comme Youtube / Safari?

Merci.

Était-ce utile?

La solution

Pour désactiver le minuteur d'inactivité, consultez le propriété idleTimerDisabled de la classe UIApplication.

À partir d'Apple:

  

La valeur par défaut de cette propriété est   NON. Lorsque la plupart des applications n'ont pas   touche comme entrée utilisateur pour un court   période, le système met l'appareil   dans un état de «sommeil» où l'écran   dims. Ceci est fait dans le but de   conserver le pouvoir. cependant,   applications qui n'ont pas d'utilisateur   entrée sauf pour le   accéléromètre - les jeux, par exemple - peuvent,   en définissant cette propriété sur YES,   désactiver le "minuteur inactif" pour éviter   veille du système.

     

Important: vous devez définir ceci   propriété que si nécessaire et devrait   assurez-vous de le réinitialiser à NO lorsque le   besoin n'existe plus. Plus   les applications devraient laisser le système   éteindre l'écran au ralenti   le temps est écoulé. Cela comprend l'audio   applications. Avec une utilisation appropriée de   Services de session audio, lecture et   enregistrement continue sans interruption lorsque   l'écran s'éteint. Le seul   applications qui devraient désactiver le   les minuteries inactives sont des applications de cartographie,   jeux, ou des programmes similaires avec   interaction utilisateur sporadique.

Autres conseils

Il existe évidemment une autre meilleure solution, mais vous pouvez charger une page vierge avec:

[NSString stringWithContentsOfUrl ... ]

La connexion sera établie si nécessaire.

Seul NSURLConnection (et les API superposées par-dessus) réinitialise la connexion de données après le réveil. Pour réinitialiser la connexion de données, créez un NSURLConnection factice en une adresse non locale et annulez-la immédiatement. alors l’API socket fonctionnera comme prévu.

Il existe un post sur les forums de développement où un développeur Apple explique cela en détail (mais je ne le trouve pas pour le moment)

Êtes-vous sûr d’établir la connexion correctement? Mon application utilise la même fonction pour les sockets et il n’y a aucun problème pour rétablir la connexion après la mise en veille du périphérique. Utilisez l'API Reachability dans la structure SystemConfiguration pour être averti lorsque la couverture est disponible et par la suite, tentez votre connexion. Notez qu'une période de temps - de quelques secondes à quelques minutes - doit s'écouler après le réveil de l'appareil pour obtenir la connexion à Internet, soyez patient.

Il existe un exemple d’atteignabilité d’Apple, effectuez une recherche également dans stackoverflow pour obtenir l’atteignabilité, et vous trouverez davantage de conseils pour le mettre en œuvre.

En fait, vous rencontrez le même problème lorsque vous modifiez les paramètres réseau de votre téléphone entre les lancements de l’application. Par exemple, disons que vous utilisez la connexion WIFI lorsque vous lancez l'application. Ensuite, vous fermez l'application et désactivez le WIFI afin que l'appareil utilise le réseau de l'opérateur. Lorsque vous relancez l'application, le socket ne pourra pas se connecter à moins que vous ne fassiez l'affaire avec la fausse connexion NSURLConnection (ou que vous lanciez le navigateur avant de lancer l'application).

De plus, l'annulation de NSURLConnection juste après son initialisation (avec connectionWithRequest ou initWithRequest) ne fonctionnait pas pour moi. N'annulez pas la demande ou attendez un moment avant de l'annuler (par exemple, avec performSelector: withObject: afterDelay:).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top