Determinar quando uma conexão com a BORDA volta após um abandono em um iPhone
-
05-07-2019 - |
Pergunta
eu incorporei amostra de acessibilidade da Apple no meu próprio projeto, então eu sei ou não tenho uma conexão de rede - se eu não tiver uma conexão de rede, eu não me incomodo de enviar e solicitações. Eu decidi ir com a implementação de notificação de status porque parecia mais fácil ter o reachablity atualizado no fundo e ter os resultados atuais disponíveis imediatamente ao contrário dando início a uma solicitação síncrona sempre que eu quiser fazer uma conexão de rede.
O meu problema é que eu começar a receber falsos negativos quando em uma rede EDGE - o telefone tem conectividade, mas o app pensa que este não é o caso. O meu entendimento é que você não receber uma notificação quando uma conexão EDGE, por isso a minha suposição é que eu perdi e recuperou a conexão em algum ponto. Reiniciando o aplicativo é geralmente suficiente para ver a conexão de rede.
Esta não é uma solução ideal, então eu queria saber se mais alguém deparei com este problema e teve quaisquer pensamentos em um soluções.
(Não sei se isso se aplica a 3G, bem como, eu estou correndo um primeiro iPhone gen).
Solução
notificataions Alcançabilidade não parece ser confiável para mim também, para a detecção de Wi-Fi. Então, eu só usar pesquisa em vez. Verificando a cada 5 segundos parece não fazer mal.
- (void) checkReachability {
BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork);
// Do something...
[self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0];
}
Outras dicas
Há um bom exemplo de acessibilidade na rede. ele funciona maravilhosamente bem: http://servin.com/iphone/iPhone-Network-Status.html
Mas você vê, quando eu tento usá-lo meu próprio caminho, ele só bombas.
Tentou implementá-lo usando:
NSString *sCellNetwork;
NSString *sNetworkReachable;
if (flags & kSCNetworkFlagsReachable || flags & kSCNetworkReachabilityFlagsIsWWAN)
{do it}
else {
Network fail alert;
}