0

アプリで一定期間 iPhone の自動スリープを無効にしようとしています。[[UIApplication sharedApplication] setIdleTimerDisabled:YES] を使用しましたが、音楽を再生しない限り問題なく動作します。

しかし、音楽を再生すると、アイドル タイマーが再びアクティブになるようです。

NSTimer で 10 秒ごとにサイレント サウンドを発するなど、あらゆる種類のトリックを試しましたが、何も機能しません。

これを実現するための提案や考えを歓迎します。

4

1 に答える 1

1

これを修正する方法は、最初に UIApplication をサブクラス化し、setIdleTimerDisabled メソッドをオーバーライドして何もしないようにすることです。次に、通常のセッターを使用する代わりに、アプリケーションから呼び出す独自のメソッドをいくつか追加します。これを行うことで、自分で行うカスタム メソッド呼び出しを除いて、アイドル タイマーを変更する可能性のあるすべてのメッセージを無視します。方法は次のとおりです。

main.m ファイルを編集して、カスタム UIApplication サブクラスを使用します。

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSString* appClass = @"CustomUIApplicationSubclass";
    NSString* delegateClass = nil;
    int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);
    [pool release];
    return retVal;
}

次に、UIApplication サブクラスを定義します。

@interface CustomUIApplicationSubclass : UIApplication {

}

- (void)disableIdleTimer;
- (void)enableIdleTimer;

@end



@implementation CustomUIApplicationSubclass


- (void)setIdleTimerDisabled:(BOOL)disabled
{
    // do nothing! take that stupid ipod controller!
}


- (void)enableIdleTimer
{
    [super setIdleTimerDisabled:NO];
}


- (void)disableIdleTimer
{
    [super setIdleTimerDisabled:YES];
}


@end

これにより、iPod コントローラは、通常の setIdleTimerDisabled メソッドが呼び出されたときに何もしないカスタム UIApplication インスタンスを使用するようになります。

于 2010-06-22T06:30:48.460 に答える