編集: バグの少ない別の方法があります: これは、現在の進行状況を 0.5 秒ごとにチェックします (より正確な曲の変更には時間がかかる可能性があります)。次の 2 つのセレクターのいずれかを呼び出すだけです。
- (void)applicationDidEnterBackground:(UIApplication *)application
または他の方法で、それはあなた次第です。
-(void ) sel1 {
[self performSelector:@selector(sel2) withObject:nil afterDelay:0.1];
NSLog(@"%f", ( _audioPlayer.duration - _audioPlayer.currentTime) );
if (( _audioPlayer.duration - _audioPlayer.currentTime) < 0.5) {
[self nextSong];
}
}
-(void) sel2 {
[self performSelector:@selector(sel1) withObject:nil afterDelay:0.4];
}
----- //古い方法// -----
まだこれを解決しようとしている人がいる場合、これが最善の解決策であることがわかりました。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
float remaining = _audioPlayer.duration - _audioPlayer.currentTime;
[self performSelector:@selector(nextSong) withObject:nil afterDelay:remaining];
}
アプリがバックグラウンドに入った後、セレクターを実行するだけです。これにより、現在のサウンドが終了するとすぐに AVAudioPlayer が強制的に曲を変更します。アプリがバックグラウンドに入るたびに新しいセレクターがセットアップされるため、注意が必要です (そのため、セレクターが同時に複数回呼び出されます)。これをカウンターで解決し、常に1に保ちました。次のように:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if (counter == 0) {
float remaining = _audioPlayer.duration - _audioPlayer.currentTime;
[self performSelector:@selector(nextSong) withObject:nil afterDelay:remaining];
counter ++;
}
}
-(void) nextSong {
counter = 0;
//Next Song Method
}