質問
アプリケーションにはインターネット接続が必要です。 iPhoneをしばらくアイドル状態にすると、3G接続がシャットダウンされるようです。いったん目を覚まし(スライドしてロックを解除する)、アプリケーションを実行すると、インターネットに接続できなくなります。最初にYoutubeまたはSafariを実行し、次にインターネットに接続し、次にYoutube / Safariをシャットダウンする必要があります。その後、アプリケーションを使用してサービスにログインできます。
アプリケーションから3G接続をアクティブにする方法を教えてください(アイドル状態から復帰した後、アプリケーションを直接使用でき、Youtube / Safariなどの他のアプリケーションを実行する必要はありませんか?
ありがとう。
解決
アイドルタイマーを無効にするには、 UIApplicationクラスのidleTimerDisabledプロパティ。
Appleから:
このプロパティのデフォルト値は いやほとんどのアプリケーションに ショートのユーザー入力としてタッチします 期間、システムはデバイスを置きます “スリープ”画面の状態 薄暗い。これは次の目的で行われます 節電。しかしながら、 ユーザーを持たないアプリケーション を除く入力 加速度計—ゲーム、たとえば、 このプロパティをYESに設定することにより、 “アイドルタイマー”を無効にします回避する システムのスリープ。
重要:これを設定する必要があります 必要な場合にのみプロパティ 必ずNOにリセットしてください もはや存在する必要はありません。最も アプリケーションはシステムに アイドル時に画面をオフにします タイマーが経過します。これには音声が含まれます アプリケーション。の適切な使用 オーディオセッションサービス、再生および 記録が中断されない場合 画面がオフになります。唯一の 無効にする必要があるアプリケーション アイドルタイマーはマッピングアプリケーションです。 ゲーム、または同様のプログラム 散発的なユーザーインタラクション。
他のヒント
明らかに別のより良い解決策がありますが、次のようにして空白ページをロードできます。
[NSString stringWithContentsOfUrl ... ]
必要に応じて接続が確立されます。
NSURLConnection
(およびその上に階層化されているAPI)のみが、スリープから復帰した後、データ接続を再初期化します。データ接続を再初期化するには、非ローカルアドレスへのダミーの NSURLConnection
を作成し、すぐにキャンセルします。 socket
APIは期待どおりに動作します。
開発者フォーラムには、Apple開発者がこれについて詳細に説明している投稿があります(ただし、現時点では見つかりません)
接続を正しく確立しますか?私のアプリケーションはソケットを使用して同じことを行い、デバイスのスリープ後に接続を再確立するのに問題はありません。 SystemConfigurationフレームワークのReachability APIを使用して、カバレッジが利用可能になったときに通知を受け、その後で接続を試行します。インターネット接続を確立するためにデバイスが起動した後、数秒から数分までの期間が経過しなければならないことに注意してください。
AppleのReachabilityサンプルがあります。到達可能性についてもstackoverflowを検索してください。実装方法のヒントが見つかります。
実際には、アプリケーションの起動の間に電話機のネットワーク設定を変更すると、同じ問題が発生します。たとえば、アプリを起動するときにWIFI接続を使用するとします。次に、アプリを閉じて、WIFIをオフにして、デバイスがキャリアのネットワークを使用するようにします。アプリを再起動すると、ダミーのNSURLConnectionでトリックを行わない限り(またはアプリを起動する前にブラウザーを起動しない限り)、ソケットは接続できません。
また、NSURLConnectionを(connectionWithRequestまたはinitWithRequestを使用して)初期化した直後にキャンセルしても機能しませんでした。リクエストをキャンセルしないか、キャンセルする前にしばらく待機します(performSelector:withObject:afterDelay:などを使用)。