1

iOS 4では、Wi-Fi 接続が永続的であったため、スリープ モード/ロックしても接続が ON のままだったことを私は知っています。

これは、バッテリー寿命を改善するために、次のバージョンのiOS 5で変更されました。

iOS 5では 、永続的な Wi-Fi 接続を確立するために、デバイスを電源に接続する必要があります。

iPad がスリープモード/ロック状態になると、Wi-Fi 接続が自動的に切断されます。

ここで問題が発生します。WiFi 経由で大量のデータを送信しているため、時間がかかりすぎる可能性があります。そのため、ユーザーはトランザクションが完了するまで待つ必要があります。

iPad がスリープ モードに切り替わったり、送信プロセスに時間がかかったりしてロックされ、WiFi 接続エラーが発生する場合があります。

これで、info.plist でUIRequiresPersistentWiFiYESに設定しました。しかし、同じネットワークの問題が再び発生しました。

iPadがスリープモードに入ったり、 iOS5でロックされていても、WiFi接続をアクティブに/維持したいと思います。これを達成するための代替手段はありますか。

ありがとう。

4

3 に答える 3

1

ふぅ...ついに解決策が得られましたidleTimerDisabled

アプリケーションのアイドル タイマーを無効にするかどうかを制御するブール値です。

アプリケーションの実行中に iPad がスリープ状態にならないようにする方法です。

このプロパティのデフォルト値は ですNO。ほとんどのアプリケーションがユーザー入力として短時間タッチされない場合、システムはデバイスをsleep画面が暗くなる " " 状態にします。

これは、電力を節約する目的で行われます。ただし、加速度計以外にユーザー入力を持たないアプリケーション (ゲームなど) は、このプロパティを に設定することでYES、「<strong> idle timer」を無効にしてシステムのスリープを回避できます。

YESWiFi経由で大量のデータを送信しているときに値を設定しNO、プロセスが完了したときに値を設定しました。

例:[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

注: アプリで画面ロックを防止する必要がない場合は、このプロパティを NO にリセットしてください。

詳細は こちら

于 2012-12-12T13:54:17.880 に答える
0

これは、iOS が Wi-Fi 接続を処理する方法によるものです。何が起こっているかというと、iPad がスリープ モードに入っているということです (これは、5 分間操作がないと発生します)。このモードは、バッテリー寿命を改善するために設計されました。iOS 4 では、Wi-Fi 接続は永続的であったため、スリープ モードに入っても接続がオンのままでした (またはセルラー データに切り替えていました)。これは、次のバージョンの iOS 5 で変更され、持続的な Wi-Fi 接続を確立するには、デバイスを電源に接続する必要があります。

于 2012-08-01T15:29:12.670 に答える
0

この質問を見たばかりで、日付を考えると、これがまだ役立つかどうかはわかりませんが、UIApplicationbeginBackgroundTaskWithExpirationHandler:方法を使用してみましたか?

次の行に沿って何かを行うことができます。

//#1 - Start a chunk of work as able to run in the "background"
UIApplication *app = [UIApplication sharedApplication];

bgTask_ = [app beginBackgroundTaskWithExpirationHandler:^{
    if (bgTask_ != UIBackgroundTaskInvalid) {

        //cancel the connection/load/chunk of work/operation
        [self cancelLoad];

        [[UIApplication sharedApplication] endBackgroundTask:bgTask_];
        bgTask_ = UIBackgroundTaskInvalid;
    }
}];

//#2 - Do work...

//#3 - Once work is finished, Explicity finish the background task
UIApplication *app = [UIApplication sharedApplication];

if (bgTask_ != UIBackgroundTaskInvalid) {
    [app endBackgroundTask:bgTask_];
    bgTask_ = UIBackgroundTaskInvalid;
}

非同期操作 (バックグラウンドで実行され、非同期的にメッセージを呼び出す) を実行している可能性があるため、別のメソッドで #3 を呼び出すこともできます。詳細については、公式ドキュメントの「beginBackgroundTaskWithExpirationHandler:」に関するドキュメントを確認することもできます。

お役に立てれば!:)

于 2012-12-03T22:08:21.777 に答える