2

我只需要确认 iPhone 应用程序是否可以在后台播放或流式传输广播。

我创建了一个运行良好的收音机应用程序。

我想添加一个功能,用户可以通过它在后台进程中播放收音机,即他们不必保持应用程序打开来播放收音机。

他们可以关闭应用程序,收音机仍在播放。

我很久以前读到苹果有一个私有 API,应用程序可以通过它在后台运行收音机,但由于它是私有的,我不能使用它。

有什么建议么?

4

3 回答 3

4

iOS SDK 应在 4.0 以上;首先在您的委托代码中:

- (void)applicationDidEnterBackground:(UIApplication *)application {

    if (isAbove4_0)

 {

        CTCallCenter *_center = [[CTCallCenter alloc] init];

        _center.callEventHandler = ^(CTCall *call) 
       {

            //NSLog(@"call:%@", call.callState);
            if ([call.callState isEqualToString:CTCallStateIncoming]) 

                {

                [RadioPlayer pausePlayer];

        }           
    };
    }

}

然后,我用了MPMoviePlayerController,AVPlayer就OK了;

if (isAbove4_0) {
    if (_mpmovieplayer == nil) {
        _mpmovieplayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
        [_mpmovieplayer setMovieControlMode:MPMovieControlModeHidden];
    }

    [_mpmovieplayer setContentURL:url];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive: YES error: nil];
    // This is necessary if you want to play a sequence of songs, otherwise your app will be
    // killed after the first one finishes.
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

    UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;

    [_mpmovieplayer play];

    newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    if (newTaskId != UIBackgroundTaskInvalid && bgTaskId != UIBackgroundTaskInvalid)
        [[UIApplication sharedApplication] endBackgroundTask: bgTaskId];
    bgTaskId = newTaskId;

}

PS:我的英文很差,希望对你有帮助:)

于 2011-03-29T03:50:01.920 回答
3

您可以使用这些音频流媒体之一在后台播放

https://github.com/mattgallagher/AudioStreamer

https://github.com/DigitalDJ/AudioStreamer

它可能会帮助你。

于 2011-03-29T04:09:32.250 回答
0

这就是它对我的工作方式。

将以下内容添加到您的 app-info.plist 文件中

<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>

然后在 application:didFinishLaunchingWithOptions 添加以下

UIBackgroundTaskIdentifier backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
     /* just fail if this happens. */
     NSLog(@"BackgroundTask Expiration Handler is called");
     [application endBackgroundTask:backgroundTask];
}];
于 2013-02-19T13:11:24.847 回答