Pergunta

Meu aplicativo precisa de conexão com a Internet. Parece que se eu manter o meu ocioso iPhone por um tempo ele desliga a sua ligação 3G. Uma vez que eu acordá-lo (Slide to Unlock) e executar o meu aplicativo, ele não pode se conectar à Internet. Eu tenho que correr Youtube ou Safari em primeiro lugar, em seguida, ele recebe a ligação à Internet, então eu tenho que desligar Youtube / Safari e então eu posso usar meu aplicativo para acessar o meu serviço.

Você poderia por favor deixe-me saber como posso ativar conexão 3G do meu aplicativo (para que eu possa usar o meu pedido imediatamente após ele acorda do estado inativo e eu não tenho que executar outros aplicativos como Youtube / Safari?

Graças.

Foi útil?

Solução

Para desativar o temporizador de inactividade, dê uma olhada no idleTimerDisabled propriedade da classe UIApplication.

De Apple:

O valor padrão dessa propriedade é NÃO. Quando a maioria das aplicações não têm toca como entrada do usuário por um curto período, o sistema coloca o dispositivo em um estado “sleep”, onde a tela escurece. Isto é feito para fins de conservação de energia. Contudo, aplicações que não têm de usuário de entrada, excepto para o acelerômetro-jogos, por exemplo, pode, definindo essa propriedade como Sim, desativar o “temporizador de inactividade” para evitar sono do sistema.

Importante: Você deve definir esta única propriedade, se necessário e deve não se esqueça de repô-lo para NÃO quando o necessidade não existe mais. A maioria aplicações devem deixar que o sistema desligar a tela quando o ocioso decorre temporizador. Isto inclui áudio formulários. Com o uso apropriado de Áudio Session Services, reprodução e gravação prosseguir sem interrupção quando a tela é desligada. O único aplicativos que devem desativar o temporizador de inactividade está mapeando aplicações, jogos ou programas semelhantes com esporádica interação do usuário.

Outras dicas

Há obviamente uma outra solução melhor, mas você poderia carregar uma página em branco com:

[NSString stringWithContentsOfUrl ... ]

A conexão será estabelecida se for necessário.

Apenas NSURLConnection (e quaisquer APIs que são camadas em cima dele) reinicializa a conexão de dados depois de acordar do sono. Para reinicializar a conexão de dados criar um NSURLConnection fictício para um endereço não-local e cancelá-lo imediatamente; em seguida, a API socket funcionará como esperado.

Há um post no fórum de desenvolvedores, onde um dev a Apple explica isso em detalhes (mas eu não posso encontrá-lo no momento)

Você tem certeza de que você está establising a conexão corretamente? Meu aplicativo faz o mesmo usando soquetes e ele não tem problemas para re-estabelecer a conexão após o sono dispositivo. Use acessibilidade API no quadro SystemConfiguration para ser notificado quando a cobertura está disponível e depois disso fazer a sua tentativa de conexão. Note-se que um período de tempo - de alguns segundos a alguns minutos - tem que decorrer após os desperta dispositivo para conectividade ganho de Internet, para ser paciente.

Há amostra de acessibilidade da Apple, procure também stackoverflow para a acessibilidade e você vai encontrar mais dicas como implementá-lo.

Na verdade, você tem o mesmo problema quando você alterar as configurações de rede em seu telefone entre os lançamentos da aplicação. Por exemplo, digamos que você usar a conexão Wi-Fi quando você iniciar o aplicativo. Em seguida, você fechar o aplicativo e desligue o Wi-Fi para que o dispositivo utiliza a rede da operadora. Quando você relançar o aplicativo a tomada não será capaz de se conectar a menos que você fazer o truque com o manequim NSURLConnection (ou você iniciar o navegador antes lanuching o app).

Além disso, o cancelamento do direito NSURLConnection após inicializando-lo (com connectionWithRequest ou initWithRequest) não funcionou para mim. Ou não cancelar o pedido ou esperar algum tempo antes de cancelá-lo (por exemplo, com performSelector: withObject: afterDelay:).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top