играет радио в фоновом режиме - PullRequest
2 голосов
/ 29 марта 2011

Мне просто нужно подтвердить, может ли приложение iPhone воспроизводить или транслировать радио в фоновом режиме.

Я создал радио-приложение, которое работает нормально.

Я хочу добавить функцию с помощьюкоторый пользователь может воспроизводить радио в фоновом режиме, то есть ему не нужно держать приложение открытым для воспроизведения радио.

Они могут закрыть приложение, и радио все еще играет.

Я давно читал, что у Apple есть частный API, с помощью которого приложение может запускать радио в фоновом режиме, но поскольку оно является частным, я не могу его использовать.

Есть предложения?

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

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 в порядке;

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: мой английский плохой, я надеюсь, что это может быть полезно для вас:)

3 голосов
/ 29 марта 2011

Вы можете использовать один из этих аудио стримеров для воспроизведения в фоновом режиме

https://github.com/mattgallagher/AudioStreamer

https://github.com/DigitalDJ/AudioStreamer

, это может помочь вам.

0 голосов
/ 19 февраля 2013

Вот как это работает для меня.

Добавить следующий файл app-info.plist

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

Затем в приложении: didFinishLaunchingWithOptions добавить следующее

UIBackgroundTaskIdentifier backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
     /* just fail if this happens. */
     NSLog(@"BackgroundTask Expiration Handler is called");
     [application endBackgroundTask:backgroundTask];
}];
...