2

nstimer と avaudioplayer を使用してサウンドを再生するアプリケーションを作成していますが、電話がディープ スリープ モードになるとサウンドとタイマーの両方が停止します。この問題を解決するにはどうすればよいですか?

ここにオーディオを再生するコードがあります

-(void)PlayTickTickSound:(NSString*)SoundFileName
{
//Get the filename of the sound file:
NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],[NSString stringWithFormat:@"/%@",SoundFileName]];// @"/Tick.mp3"];
//Get a URL for the sound file
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
NSError *error;
if(self.TickPlayer==nil)
{
    self.TickPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:filePath error:&error];
    // handle errors here.
    self.TickPlayer.delegate=self;
    [self.TickPlayer setNumberOfLoops:-1];  // repeat forever
    [self.TickPlayer play];
}
else
{
    [self.TickPlayer play];
}
}
4

1 に答える 1

4

画面がロックされているときにアプリがスリープ状態にならないようにするには、オーディオ セッションを kAudioSessionCategory_MediaPlayback タイプに設定する必要があります。

次に例を示します。

UInt32 category = kAudioSessionCategory_MediaPlayback;
OSStatus result = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
                                        sizeof(category), &category);

if (result){
    DebugLog(@"ERROR SETTING AUDIO CATEGORY!\n");
}

result = AudioSessionSetActive(true);
if (result) {
    DebugLog(@"ERROR SETTING AUDIO SESSION ACTIVE!\n");
}

オーディオ セッション カテゴリを設定しない場合、アプリはスリープ状態になります。

これは、オーディオを再生し続けている限り、アプリがスリープ状態になるのを防ぎ続けるだけです. 音声の再生を停止しても画面がロックされたままの場合、アプリはスリープ状態になり、タイマーは一時停止します。

アプリを無期限に起動したままにしたい場合は、「サイレント」オーディオ ファイルを再生して起動状態を維持する必要があります。

ここにコード例があります: iPhone スリープの防止

于 2009-11-20T01:53:00.810 に答える