iOS 5の場合、アプリケーションがバックグラウンドに入ると、Wi-Fi接続が失われます。
ただし、アプリケーションがバックグラウンドに入ってから4〜5分以内に一部のタスクを実行できるため、デバイスがスリープする前の次の4〜5分間はWi-Fi接続を使用したいと思います。
これはを使用して達成できると思いますがbeginBackgroundTaskWithExpirationHandler:
、問題を解決することはできません
beginBackgroundTaskWithExpirationHandler
これを処理する方法は、送信するすべてのネットワーク リクエストに対してを使用することです。
このようにして、アプリがバックグラウンドに移動した場合でも、すべてのネットワークが完了するようにします。
私は通常、すべてのネットワーク リクエストを処理するために 1 つのシングルトン オブジェクトを使用しているので、リクエストが送信される前に呼び出します。
- (void)startBackgroundTask
{
// ask for extra time if this is called when app go to suspended
UIApplication *application = [UIApplication sharedApplication];
_bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
// Clean up any unfinished task business by marking where you.
// stopped or ending the task outright.
[application endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}];
}
そして、応答(成功/失敗)を受け取った後、またはリクエストをキャンセルした場合は、電話します
- (void)stopBackgroudTask
{
UIApplication *app = [UIApplication sharedApplication];
if (_bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}
}
*定義することを忘れないでくださいUIBackgroundTaskIdentifier *_bgTask;
また、Wi-Fi を大量に使用する予定がある場合はApplication uses Wi-Fi
、plist ファイルのキーを YES に設定する必要があります。そうしないと、アプリが実行されていても、30 分後に Wi-Fi がシャットダウンされます。
iPhoneを無効にしてスリープモードにするだけです
-(void) sleepModeDisable{
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
この関数を 10 秒ごとに呼び出してください。