私はアプリケーションを持っているので、画面がオフになっても機能し続けたい。 これを行う前に、私はこのハック/トリックを使用しました - バックグラウンド(AudioServicesPlaySystemSound)のループで静かな/空のサウンドを再生します。ユーザーがオン/オフボタンを押すと、アプリケーションはバックグラウンドで動作します。 iPhoneをスリープモードにすることは決して許されません。画面をオフにしたり、Wi-FiやBluetoothのようなものをオフにしたりします。そしてそれは働いた。私は新しいアプリケーションで同じトリックを使いたいと思っていましたが、今テストしていたときにもう動作しないようです。 (AVAudioPlayerを使用して)再生するサウンドが再生されない(たとえスクリーンを回転させても、バックグラウンドで再生されるサウンドが再生されますもう一度)。 私はどの時点で動作が停止したのかわかりません(それは3.x OSで動作していました)。私は何か間違っているのですか? Appleは画面をオフにしてもアプリを動作させる「ハック」を変更/修正しましたか?デバイスがスリープ状態になる(そしてバッテリの消費が少なくなります)が、動作し続ける別の方法はありますか?画面をオフにしてサウンドを再生する/ iPhoneをスリープ状態にしないようにする
これは私が背景/サイレントサウンドを再生するために使用するコードです:
-(void) playSilentSound
{
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef silentUrl = CFBundleCopyResourceURL (mainBundle, CFSTR ("silence"), CFSTR ("aiff"), NULL);
AudioServicesCreateSystemSoundID (silentUrl, &silentSound);
silentTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector:@selector(playSilence) userInfo: nil repeats: YES];
}
-(void) playSilence
{
AudioServicesPlaySystemSound (silentSound);
}
そして、これは私が画面がオフになっている場合にも果たすべきサウンドを再生する方法である:
-(BOOL) playSound: (NSString *) path withLoops: (BOOL) loops stopAfter: (int) seconds
{
NSError *error;
player = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath: path] error: &error];
player.delegate = self;
player.numberOfLoops = 0;
player.volume = volume;
secondsPlayed = 0;
loop = loops;
BOOL played = [player play];
if(played && seconds > 0)
{
timer = [[NSTimer scheduledTimerWithTimeInterval: 0.5 target: self selector: @selector(stopPlaying:) userInfo: [NSNumber numberWithInt: seconds] repeats: YES] retain];
secondsLimit = seconds;
} else {
secondsLimit = -1;
}
}
-(void) stopPlaying:(NSTimer*)theTimer
{
if(secondsLimit > 0 && (secondsPlayed + [player currentTime]) >= secondsLimit)
{
[player stop];
[timer release];
timer = nil;
}
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)sender successfully:(BOOL)flag
{
if(sender == player)
{
if(flag) { secondsPlayed += sender.duration; }
if(loop) { [player play]; }
}
}
コードはちょっと複雑かもしれません - 最初の数行に過ぎないかもしれません - そのようにしてX秒の音しか再生できません(音がXより短い場合、総時間がX = )。もちろん、スクリーンが残っていれば、すべてがうまくいきます。
また、あなたのプロジェクトで有用なコードが見つかった場合(playSound:withLoops:stopAfter :) - 自由に使ってもいいですが(私にメッセージを送ってくれれば嬉しいです。 ))。
ありがとうございました!この1行のコードは、私のバックグラウンドオーディオを再び生き生きとさせました。 –