Comment faire pour obtenir l'Accessibilité des Notifications dans iOS en arrière-plan lors de la suppression d'un réseau Wi-Fi?
Je suis à l'aide de l'Accessibilité avec succès pour déterminer l'état du réseau, et être notifié des changements (par exemple,L'accessibilité Guide pour iOS 4).
Ma question n'est pas comment obtenir de l'Accessibilité et de l'exécution, mais plutôt la suivante.
Mon AppDelegate
gère l'Accessibilité des trucs. L'application reçoit des notifications ( kReachabilityChangedNotification
), tandis que l'application est en cours d'exécution, et lorsque l'application est en arrière-plan (applicationDidEnterBackground:
).
L'app est conçu pour recharger la lecture d'un flux audio lorsqu'il constate que c'est perdu d'une connexion Wi-Fi, par exemple, Pour tester, j'ai activé le Wi-Fi activé et désactivé dans les Paramètres, et tout a fonctionné parfaitement. Dans le monde réel, des tests, j'ai souvent perdre la connectivité Wi-Fi quand je l'ai sortie la portée du point d'accès. J'ai trouvé que l'Accessibilité n'est pas de m'aider un peu trop dans ce cas. Je ne sais pas si c'est parce que l'Accessibilité des notifications n'est pas accordé lorsque l'écran est verrouillé, ou si l'Accessibilité n'est pas la poignée de la lente diminution du signal de plus en plus lointain, Wi-Fi, point d'accès, mais peu importe je ne peux pas comprendre pourquoi les essais du monde réel ne correspond pas au cas idéalisé.
C'est ce que mon code ressemble. J'ai d'abord mis en place pour recevoir les notifications, et commencer à écouter Accessibilité:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];
//Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
....
return YES;
}
et puis, c'est la fonction qui répond aux changements de connectivité:
- (void)checkNetworkStatus:(NSNotification *)notice {
//called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}
Les notifications viennent à travers, même lorsque l'application est en arrière-plan, mais ils ne sont pas dans le monde réel analyses décrites ci-dessus.
Merci pour toute aide.
- Avez-vous essayé une combinaison de
reachabilityForInternetConnection
etreachabilityForLocalWifi
? - Avez-vous trouvé une solution pour cela? Je suis confronté à un problème similaire, et les solutions ne semblent pas aider ou ne sont pas ce que je cherche.
- Je ne sais pas ce que j'ai résolu mon problème, que je n'ai pas besoin de travailler sur ce projet ces derniers temps. Avez-vous fait sûr que l'application est en cours d'exécution en arrière-plan avec une tâche en arrière-plan, par @Hurden de la recommandation?
- Oui, c'était en effet la solution, mais avec un léger changement. Je vais ajouter une autre réponse au cas où quelqu'un a le même problème.
Vous devez vous connecter pour publier un commentaire.
Par défaut dans le contexte de l'état d'application des séjours pour une courte période seulement, la plupart des applications se déplacer à l'état suspendu, peu de temps après. Cela signifie que l'application est en arrière-plan, mais n'est pas l'exécution du code. Si votre personnalisé de mise en œuvre de notification ne fonctionne pas.
Devez actualiser NetworkReachability au Temps de Réveil dans l'app délégué methodes:
Je travaille sur une application VoIP, qui est lancé en arrière-plan lorsque l'iPhone démarre, à quel point il y a peut-être pas de la joignabilité du réseau (par exemple, si le téléphone dispose d'un code d'accès et/ou d'une carte SIM avec un code PIN). Mais depuis que l'application est lancée directement dans le fond, la méthode du délégué
applicationDidEnterBackground:
n'est pas appelé. Au lieu de ce que j'ai fait était d'utiliser @Hurden l'idée directement dansapplication:didFinishLaunchingWithOptions
, la vérification de laapplicationState
pour voir si l'application était en train de commencer en arrière-plan. Cela a permis à mon application pour obtenir lekReachabilityChangedNotification
notification après que le téléphone a été débloqué (pour activer le WiFi pour se connecter à l'aide de la stockées mot de passe).