问题
我有一个在后台播放音频的应用程序。 当当前曲目完成时,我正在尝试使用 beginBackgroundTaskWithExpirationHandler 跳到下一个曲目。
下面是播放状态改变时调用的代码。 即使同一方法中的其他代码在后台成功,它也不会记录“beginBG called”。
- UIApplication *app = [UIApplication sharedApplication];
- bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
- [self ffwButtonPressed:ffwButton];
- NSLog(@"beginBG called");
- [app endBackgroundTask:bgTask];
- bgTask = UIBackgroundTaskInvalid;
- }];
复制代码
ffwButtonPressed 调用几个不同的方法来改变轨道。 完成后。 . .
- UIApplication *app = [UIApplication sharedApplication];
- if (bgTask != UIBackgroundTaskInvalid) {
- [app endBackgroundTask:bgTask];
- bgTask = UIBackgroundTaskInvalid;
- NSLog(@"end bgTask");
复制代码
编辑:声明
UIBackgroundTaskIdentifier bgTask;
编辑:在 ViewDidLoad
bgTask = 0;
回答
您实际上误解了该功能
- -(UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler
复制代码
名为“handler”的块参数是后台任务到期(10 分钟)时发生的情况。
要运行代码,需要将代码从过期处理程序中取出:
- UIApplication *app = [UIApplication sharedApplication];
- bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
- bgTask = UIBackgroundTaskInvalid;
- };
- [self ffwButtonPressed:ffwButton];
- NSLog(@"beginBG called");
- [app endBackgroundTask:bgTask];
复制代码
|