找回密码
 立即注册
问题
我有一个在后台播放音频的应用程序。 当当前曲目完成时,我正在尝试使用 beginBackgroundTaskWithExpirationHandler 跳到下一个曲目。

下面是播放状态改变时调用的代码。 即使同一方法中的其他代码在后台成功,它也不会记录“beginBG called”。
  1. UIApplication *app = [UIApplication sharedApplication];
  2. bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
  3.     [self ffwButtonPressed:ffwButton];
  4.     NSLog(@"beginBG called");
  5.     [app endBackgroundTask:bgTask];
  6.     bgTask = UIBackgroundTaskInvalid;
  7. }];
复制代码

ffwButtonPressed 调用几个不同的方法来改变轨道。 完成后。 . .
  1. UIApplication *app = [UIApplication sharedApplication];
  2.     if (bgTask != UIBackgroundTaskInvalid) {
  3.         [app endBackgroundTask:bgTask];
  4.         bgTask = UIBackgroundTaskInvalid;
  5.         NSLog(@"end bgTask");
复制代码

编辑:声明

UIBackgroundTaskIdentifier bgTask;

编辑:在 ViewDidLoad

bgTask = 0;

回答
您实际上误解了该功能
  1. -(UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler

复制代码

名为“handler”的块参数是后台任务到期(10 分钟)时发生的情况。

要运行代码,需要将代码从过期处理程序中取出:
  1. UIApplication *app = [UIApplication sharedApplication];
  2. bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
  3.     bgTask = UIBackgroundTaskInvalid;
  4. };

  5. [self ffwButtonPressed:ffwButton];
  6. NSLog(@"beginBG called");
  7. [app endBackgroundTask:bgTask];
复制代码






上一篇:在 Python 中出现错误“SyntaxWarning: 'str' object is not callable”
下一篇:无法在 Xcode 中重命名组文件夹