MPMoviePlayerControllerで音楽を再生しているメディアプレーヤーアプリがあります。再生位置に基づいてUIを更新する必要があります。私が知る限り、コールバックなどでプレーヤーからこの情報を積極的に受け取る方法はありません。基本的に、自分でポーリングする必要があります。
そのため、毎秒実行する単純なタイマーを使用すると思いました。コードは次のとおりです。
セットアップコードのどこか:
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updatePlaybackProgressFromTimer:) userInfo:nil repeats:YES];
その後:
- (void) updatePlaybackProgressFromTimer:(NSTimer *)timer {
if (([UIApplication sharedApplication].applicationState == UIApplicationStateActive) && (player.playbackState == MPMoviePlaybackStatePlaying)) {
CGFloat progress = player.currentPlaybackTime / player.duration;
// do something useful with this info
}
}
アプリがバックグラウンドにある場合でも、タイマーは1秒ごとに実行されます。このメソッドは、最初にアプリがアクティブでプレーヤーが再生されているかどうかを確認してから、UIの更新を行います。
この方法で毎秒タイマーを実行することによるバッテリー寿命への影響はありますか?バックグラウンドに入るときにタイマーを破棄し、アプリをアクティブ化するときにタイマーを再度アクティブ化するように、もっと注意を払う必要がありますか?バッテリー寿命の影響はあると思いますが、現実的にはどれくらい深刻ですか?または、この種のことを行うための他の推奨される方法はありますか?