2009-04-28 7 views
2

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 que je l'ai réveillé (glisser pour déverrouiller) et exécuter mon application, il ne peut pas se connecter à Internet. Je dois d'abord faire fonctionner Youtube ou Safari, puis la connexion Internet, puis je dois fermer Youtube/Safari et ensuite utiliser mon application pour me connecter à mon service. Pourriez-vous s'il vous plaît me faire savoir comment puis-je activer la connexion 3G de mon application (pour que je puisse utiliser mon application directement après son réveil et que je n'ai pas à lancer d'autres applications comme Youtube/Safari?iPhone 3G Connexion Activation

Merci

Répondre

2

Pour désactiver la minuterie d'inactivité, consultez le idleTimerDisabled property de la classe UIApplication.

De Apple:

La valeur par défaut de cette propriété est NO. Lorsque la plupart des applications n'ont pas de touche en tant qu'entrée de l'utilisateur pendant une courte période de , le système place le périphérique dans un état de «veille» où l'écran s'assombrit. Ceci est fait aux fins de conservation de la puissance . Cependant, applications qui ne disposent pas d'entrée utilisateur sauf pour les accéléromètre-jeux, par exemple, peuvent, en définissant cette propriété sur OUI, désactiver le « temporisateur de veille » pour éviter sommeil du système.

Important: Vous devez définir cette propriété que si nécessaire et doit assurez-vous de le remettre à NO lorsque le besoin n'existe plus. La plupart des applications doivent laisser le système éteindre l'écran lorsque le temps d'inactivité s'écoule. Cela inclut les applications audio . Avec l'utilisation appropriée des services de session audio , la lecture et l'enregistrement se poursuivent sans interruption lorsque l'écran s'éteint. Les seules applications qui doivent désactiver le temporisateur inactif sont des applications de mappage, des jeux ou des programmes similaires avec interaction utilisateur sporadique .

+0

Merci pour votre réponse Martin. Cela ne résout pas le problème original. Je dois encore démarrer l'application de type youtube/safari qui permettra la connexion 3G et ensuite je peux exécuter mon application. De plus, cette méthode consommera également la puissance de l'iPhone. – ebaccount

+0

Que utilisez-vous pour vous connecter à votre application? Je fais des appels vers un site externe lorsque mon application démarre et qu'elle accède à Internet immédiatement. –

+0

J'utilise des fonctions de socket comme connect (...) qui n'active pas la connexion 3G. Pourriez-vous me dire quelle API vous utilisez pour faire des appels sur votre site externe? Je pense que l'API active la connexion 3G. – ebaccount

2

il y a évidemment une autre meilleure solution, mais vous pouvez charger une page blanche avec:..

[NSString stringWithContentsOfUrl ... ] 

La connexion sera établie si elle est nécessaire

+0

Pourriez-vous nous faire savoir l'API? – ebaccount

+0

@raihan - que voulez-vous dire par API ici? il suffit d'exécuter le code de remy: [NSString stringWithContentsOfUrl ...] pour accéder à nouveau à Internet – Raj

0

Êtes-vous sûr de bien établir la connexion? Mon application fait la même chose en utilisant des sockets et il n'a aucun problème pour rétablir la connexion après le sommeil de l'appareil. Utilisez l'API Reachability dans la structure SystemConfiguration pour être averti lorsque la couverture est disponible et ensuite effectuer votre tentative de connexion. Notez qu'une période de temps - de quelques secondes à quelques minutes - doit s'écouler après que l'appareil se soit réveillé pour obtenir la connectivité Internet, alors soyez patient.

Il existe un exemple d'accessibilité d'Apple, recherchez également stackoverflow pour l'accessibilité et vous trouverez plus d'astuces pour l'implémenter.

1

Seul le NSURLConnection (et toutes les API qui sont superposées) 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 à une adresse non locale et annulez-le immédiatement; alors l'API socket fonctionnera comme prévu.

Il y a un post sur les forums de développeurs où un dev d'Apple explique en détail (mais je ne le trouve pas à l'heure actuelle)

+0

Oui, cela a fonctionné pour moi. Maintenant, pourriez-vous me dire ce que vous voulez dire par adresse non locale et comment puis-je annuler le NSURLConnection tout de suite? Je n'ai pas besoin d'envoyer la demande pour récupérer la page factice (disons google.ca)? – ebaccount

+0

Les adresses locales se trouvent dans l'une des plages suivantes: 10.x.x.x, 169.254.x.x, 172.16.x.x à 172.31.x.x et 192.168.x.x; ou toute adresse qui résout une adresse IP dans cette plage (les requêtes DNS sont mises en cache, vous ne pouvez donc pas garantir qu'elles activeront la connexion de données). Pour annuler, envoyez le message -cancel à une connexion qui a été initialisée avec + [NSURLConnection connectionWithRequest: delegate:] (ou alloc, initWith ..., démarrez puis annulez séparément) – rpetrich

0

En fait, vous obtenez le même problème lorsque vous modifiez les paramètres réseau 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 éteignez le WIFI pour que l'appareil utilise le réseau du transporteur. Lorsque vous relancez l'application, le socket ne pourra pas se connecter à moins que vous ne fassiez l'affaire avec le NSURLConnection factice (ou que vous lanciez le navigateur avant d'installer l'application). De même, annuler le droit NSURLConnection après l'avoir initialisé (avec connectionWithRequest ou initWithRequest) ne fonctionnait pas pour moi. N'annulez pas la demande ou attendez un certain temps avant de l'annuler (par exemple, avec performSelector: withObject: afterDelay :).

Questions connexes