Я считаю, что этот небольшой фрагмент делает работу довольно хорошо.
public static IEnumerable<List<T>> Chunked<T>(this List<T> source, int chunkSize)
{
var offset = 0;
while (offset < source.Count)
{
yield return source.GetRange(offset, Math.Min(source.Count - offset, chunkSize));
offset += chunkSize;
}
}
Попробуйте этот код в вашем applicationDidEnterBackground
:
UIApplication *app = [UIApplication sharedApplication];
bgTask = 0;
backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
Я нашел его где-то в стеке для меня
Также ознакомьтесь с этим руководством, которое охватывает фоновые режимы, включая фон аудио .. http://www.raywenderlich.com/29948/backgrounding-for-ios
С удивлением я могу сказать, что это может быть достигнуто, и я просто это сделал.
Этот метод поддерживает все возможности:
Пока у вас есть экземпляр AVPlayer
, работающий под управлением iOS, предотвращает автоматическую блокировку устройство.
Сначала вам нужно настроить приложение для поддержки звукового фона из файла Info.plist, добавляя в массив UIBackgroundModes
элемент audio
.
Затем введите ваш appDelegate.m в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:
эти методы
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
и #import <AVFoundation/AVFoundation.h>
Затем в вашем представлении контроллер, который управляет AVPlayer
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
и
- (void)viewWillDisappear:(BOOL)animated
{
[mPlayer pause];
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
, затем ответьте на
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
if([mPlayer rate] == 0){
[mPlayer play];
} else {
[mPlayer pause];
}
break;
case UIEventSubtypeRemoteControlPlay:
[mPlayer play];
break;
case UIEventSubtypeRemoteControlPause:
[mPlayer pause];
break;
default:
break;
}
}
. Другой прием необходим для возобновления воспроизведения, если пользователь нажимает кнопку «домой» (в в этом случае воспроизведение приостанавливается с исчезновением).
Когда вы управляете воспроизведением видео (у меня есть методы play:
и pause:
), установите
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
и
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
[g 16] и соответствующий метод, который будет запускать таймер и возобновить воспроизведение. - (void)applicationDidEnterBackground:(NSNotification *)notification
{
[mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
AVPlayerLayer
, он играет на заблокированном экране. Я, очевидно, нуждаюсь в PlayerLayer, чтобы увидеть видео. Любая идея, как получить AVPlayerLayer
, чтобы просто пойти с потоком, который AVPlayer
кажется прекрасным, и не прекращать играть при блокировке телефона?
– Nerrolken
13 August 2013 в 19:53