Domanda

La mia applicazione richiede una connessione a Internet. Sembra che se mantengo il mio iPhone inattivo per un po ', interrompe la sua connessione 3G. Una volta che lo riattivo (scorri per sbloccare) ed eseguo la mia applicazione, non è possibile connettersi a Internet. Devo prima eseguire Youtube o Safari, quindi ottenere la connessione Internet, quindi devo chiudere Youtube / Safari e quindi posso usare la mia applicazione per accedere al mio servizio.

La prego di farmi sapere come posso attivare la connessione 3G dalla mia applicazione (in modo da poter utilizzare la mia applicazione direttamente dopo che si è svegliata dallo stato inattivo e non devo eseguire altre applicazioni come Youtube / Safari?

Grazie.

È stato utile?

Soluzione

Per disabilitare il timer di inattività, dai un'occhiata a proprietà idleTimerDisabled della classe UIApplication.

Da Apple:

  

Il valore predefinito di questa proprietà è   NO. Quando la maggior parte delle applicazioni non ha   tocca come input dell'utente in breve   periodo, il sistema mette il dispositivo   in un & # 8220; sleep & # 8221; indicare dove si trova lo schermo   si attenua. Questo viene fatto ai fini di   risparmio energetico. Però,   applicazioni che non hanno utente   input ad eccezione di   accelerometro & # 8212; giochi, ad esempio & # 8212; can,   impostando questa proprietà su SÌ,   disabilita & # 8220; timer di inattività & # 8221; avvertire   sospensione del sistema.

     

Importante: dovresti impostarlo   proprietà solo se necessario e dovrebbe   assicurarsi di reimpostarlo su NO quando il   bisogno non esiste più. Maggior parte   le applicazioni dovrebbero lasciare il sistema   spegni lo schermo quando è inattivo   il timer è scaduto. Questo include l'audio   applicazioni. Con l'uso appropriato di   Servizi di sessione audio, riproduzione e   la registrazione procede ininterrottamente quando   lo schermo si spegne. Il solo   applicazioni che dovrebbero disabilitare il   i timer inattivi stanno mappando le applicazioni,   giochi o programmi simili con   interazione sporadica dell'utente.

Altri suggerimenti

Esiste ovviamente un'altra soluzione migliore, ma è possibile caricare una pagina vuota con:

[NSString stringWithContentsOfUrl ... ]

La connessione verrà stabilita se necessario.

Solo NSURLConnection (e tutte le API sovrapposte) reinizializza la connessione dati dopo il risveglio dalla sospensione. Per reinizializzare la connessione dati, creare un NSURLConnection fittizio a un indirizzo non locale e cancellarlo immediatamente; quindi l'API socket funzionerà come previsto.

C'è un post sui forum degli sviluppatori in cui uno sviluppatore di Apple lo spiega in dettaglio (ma al momento non riesco a trovarlo)

Sei sicuro di aver stabilito correttamente la connessione? La mia applicazione fa lo stesso usando i socket e non ha problemi a ristabilire la connessione dopo lo spegnimento del dispositivo. Utilizzare l'API di raggiungibilità nel framework SystemConfiguration per ricevere una notifica quando è disponibile la copertura e successivamente effettuare il tentativo di connessione. Si noti che un periodo di tempo - da alcuni secondi a un paio di minuti - deve trascorrere dopo che il dispositivo si è svegliato per ottenere la connettività Internet, quindi sii paziente.

C'è un esempio di raggiungibilità di Apple, cerca anche stackoverflow per la raggiungibilità e troverai altri suggerimenti su come implementarlo.

In realtà, si ottiene lo stesso problema quando si cambiano le impostazioni di rete sul telefono tra i lanci dell'applicazione. Ad esempio, supponiamo che tu usi la connessione WIFI all'avvio dell'app. Quindi chiudi l'app e spegni il WIFI in modo che il dispositivo utilizzi la rete del gestore telefonico. Quando riavvii l'app, il socket non sarà in grado di connettersi se non esegui il trucco con il fittizio NSURLConnection (o avvii il browser prima di connetterlo all'app).

Inoltre, annullare NSURLConnection subito dopo averlo inizializzato (con connectionWithRequest o initWithRequest) non ha funzionato per me. Non annullare la richiesta o attendere qualche tempo prima di annullarla (ad es. Con performSelector: withObject: afterDelay :).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top