0

私のプロジェクトには、バックグラウンド状態でも新しいオーディオ ファイルの再生をサポートする関数があります。MPMoviePlayerController クラスを使用してオーディオ ファイルを再生します。しかし、私はそれがアクティブな状態で開始されたことを発見しました.その後、バックグラウンド状態で同じオーディオを再生し続けます(オーディオファイルが終了していない場合);しかし、バックグラウンド状態で新しいオーディオを開始しません.

バックグラウンド ステータスで新しいオーディオの再生をサポートするにはどうすればよいですか? iPhone のミュージック プレーヤーは、runloop またはランダム PlayMode を設定すると、バックグラウンド ステータスで新しいオーディオの再生をサポートできることがわかりました。

以下は、実際に外観を証明するための私のコードです。

(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
     {

     }
 }
}
4

1 に答える 1

0

ネットで見つけたいくつかの方法を試してみましたが、うまくいきませんでした。誰かがこの方法を使って質問を解決していました。理由はわかりませんでした。

以下は私のコードです:</p>

- (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-03-18 16:20:11.844 Sz[1665:907] [MPAVController] 自動再生: 自動再生を一時停止する 2013-03-18 16:20:11.845 Sz[1665:907] [MPAVController] 自動再生: Disabling autoplay 2013-03-18 16:20:13.489 Sz[1665:907] 文件存在 2013-03-18 16:20:18.017 Sz[1665:907] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 2013-03-18 16:20:18.998 Sz[1665:907] 入後台 2013-03-18 16:20:21.269 Sz[1665:907] 播放地址 2013-03-18 16: 20:26.251 Sz[1665:907] [MPAVController] 自動再生: 自動再生を有効にします 2013-03-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] [MPAVController] 自動再生: 自動再生を有効にします 2013-03-18 16:20:26.338 Sz[1665:

于 2013-03-18T08:23:04.890 に答える