2013-03-18 141 views
0

我的項目中有一個功能支持即使在後臺狀態下播放新的音頻文件。我使用MPMoviePlayerController類播放音頻文件。 但是我發現它是在活動狀態下啓動的,那麼它會在後臺狀態下繼續播放相同的音頻(如果音頻文件沒有完成);但是它不會在後臺狀態下啓動新的音頻。如何支持在後臺播放音頻文件

我該如何支持在背景狀態下播放新音頻? 我發現iPhone的音樂播放器可以支持在後臺狀態播放新音頻時設置runloop或隨機播放模式。

以下是我的代碼來證明其實外觀:

(void)applicationDidEnterBackground:(UIApplication *)application 
{ 

    if (pCotnroller1) { 
     [pCotnroller1 release]; 
    } 
    pCotnroller1 = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://r.yhiker.com:9001/0086/32/05/060009/Data/6/00863205060009006_24Kbps.mp3"]]; 
    pCotnroller1.shouldAutoplay = YES; 
    [pCotnroller1 play]; 
    //it wasn't played here 
} 


(void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 
    if (pCotnroller1) { 
     switch (pCotnroller1.playbackState) { 
      case MPMoviePlaybackStateStopped: 
      NSLog(@"播放地址"); 
      break; 

      case MPMoviePlaybackStatePaused: 
      NSLog(@"播放暫停"); 
      break; 

      case MPMoviePlaybackStateInterrupted: 
      NSLog(@"播放中斷"); 
      break; 

      case MPMoviePlaybackStateSeekingBackward: 
      break; 

      case MPMoviePlaybackStateSeekingForward: 
      break; 

      default: 
      break; 
    } 

    if (pCotnroller1.playbackState == MPMoviePlaybackStatePlaying) { 
      //it will come here,and play autoed here 

     // [pCotnroller1 play]; 
    } 
    else 
    { 

    } 
} 
} 

回答

0

我想這是在網上找到了一些辦法,但它並沒有work.Some一個曾用這樣的方式來求解他問題,我不知道爲什麼。

下面是我的代碼:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    [application beginReceivingRemoteControlEvents]; 
    [self updateUserLocation]; 
} 

- (void)updateUserLocation 
{ 
    if (!pCotnroller1) { 
    //  pCotnroller1 = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://r.yhiker.com:9001/0086/32/05/PP0041/Data/13/00863205PP0041013_24Kbps.mp3"]]; 

     NSString *audioDiskPath = [HelpTools returnSpotAudioDiskPath:@"00863205PP0041013"]; 
      pCotnroller1 = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:audioDiskPath/*@"/var/mobile/Applications/E7A06CB2-0856-407D-ABA1-2A846B65CD9D/Library/Caches/Data/0086/32/05/PP0041/Data/13/00863205060005016_24Kbps.mp3"*/]]; 

     pCotnroller1.shouldAutoplay = YES; 
     if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) { 
      [pCotnroller1 play]; 
      NSLog(@"進入後臺"); 
      UIApplication *app = [UIApplication sharedApplication]; 
      UIBackgroundTaskIdentifier taskID = [app beginBackgroundTaskWithExpirationHandler:nil]; 
      if (bgTask != UIBackgroundTaskInvalid) { 
       [app endBackgroundTask:bgTask]; 
       NSLog(@"允許後臺播放"); 
      } 

      bgTask = taskID; 
     } 
     else 
     { 
      NSLog(@"飛後臺進行播放"); 
      [pCotnroller1 play]; 
     } 
    } 
} 

控制檯打印: 2013年3月18日16:20:11.844 SZ [1665:907] [MPAVController]自動播放:用於暫停 2013-禁用自動播放03-18 16:20:11.845 SZ [1665:907] [MPAVController]自動播放:禁用自動播放文件存在 2013-03-18 16:20: 18.017 SZ [1665:907] [MPAVController]自動播放:跳過自動播放,禁用(當前項目:1,播放器:0) 2013-03-18 16:20:18.998 Sz [1665:907]進入後臺 2013- 03-18 16:20:21.2 69 Sz [1665:907]播放地址 2013年3月18日16:20:26.251 Sz [1665:907] [MPAVController]自動播放:啓用自動播放功能2013.3-18 16:20:26.307 Sz [1665:907] [MPAVController]自動播放:可能保持或滿緩衝區:0 2013-03-18 16:20:26.309 SZ [1665:907] [MPAVController]自動播放:跳過自動播放,沒有足夠的緩衝跟上。 2013-03-18 16:20:26.319 Sz [1665:907] [MPAVControlController]自動播放:啓用自動播放Sz [1665:907] [MPCloudAssetDownloadController]媒體項目ID請求的優先順序:0

+0

我曾經使用網絡音頻資源,它也沒有工作 – gsy 2013-03-18 08:25:42