UPDATE IOS 11.2 с Swift 4:
Теперь, если вы используете AVPlayer для воспроизведения музыки файлы, вы также должны настроить MPNowPlayingInfoCenter.default()
, чтобы отображать информацию о воспроизведении на экране блокировки.
Ниже приведен код, воспроизводящий элементы управления на экране, но он не сможет отвечать на любые команды.
Если вы хотите, чтобы элементы управления для работы вы должны проверить образец проекта яблока здесь: https://developer.apple.com/library/content/samplecode/MPRemoteCommandSample/Introduction/Intro.html#//apple_ref/doc/uid/TP40017322
компании Apple образец кода охватывает все, но я найти его в заблуждение.
Если вы хотите воспроизвести звук и показать элементы управления на экране блокировки, эти шаги будут выполнены просто отлично.
ВАЖНО: Если вы НЕ используя AVPlayer для воспроизведения звука. Если вы используете некоторые сторонние библиотеки для создания звука или воспроизведения звукового файла, вы должны читать комментарии внутри кода. Также, если вы используете ios simulator 11.2, вы не сможете увидеть какие-либо элементы управления на экране блокировки. Вы должны использовать устройство, чтобы он работал.
1- Выбор проекта -> capabilites -> набор режимов фона ON -> галочка Аудио, AirPlay и картинка в картинке
2- AppDelegate.swift файл должен выглядеть это:
import UIKit
import AVFoundation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
// Override point for customization after application launch.
do
{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
//!! IMPORTANT !!
/*
If you're using 3rd party libraries to play sound or generate sound you should
set sample rate manually here.
Otherwise you wont be able to hear any sound when you lock screen
*/
//try AVAudioSession.sharedInstance().setPreferredSampleRate(4096)
}
catch
{
print(error)
}
// This will enable to show nowplaying controls on lock screen
application.beginReceivingRemoteControlEvents()
return true
}
}
3- ViewController.swift должен выглядеть следующим образом:
import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController
{
var player : AVPlayer = AVPlayer()
override func viewDidLoad()
{
super.viewDidLoad()
let path = Bundle.main.path(forResource: "music", ofType: "mp3")
let url = URL(fileURLWithPath: path!)
// !! IMPORTANT !!
/*
If you are using 3rd party libraries to play sound
or generate sound you should always setNowPlayingInfo
before you create your player object.
right:
self.setNowPlayingInfo()
let notAVPlayer = SomePlayer()
wrong(You won't be able to see any controls on lock screen.):
let notAVPlayer = SomePlayer()
self.setNowPlayingInfo()
*/
self.setNowPlayingInfo()
self.player = AVPlayer(url: url)
}
func setNowPlayingInfo()
{
let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default()
var nowPlayingInfo = nowPlayingInfoCenter.nowPlayingInfo ?? [String: Any]()
let title = "title"
let album = "album"
let artworkData = Data()
let image = UIImage(data: artworkData) ?? UIImage()
let artwork = MPMediaItemArtwork(boundsSize: image.size, requestHandler: { (_) -> UIImage in
return image
})
nowPlayingInfo[MPMediaItemPropertyTitle] = title
nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = album
nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
nowPlayingInfoCenter.nowPlayingInfo = nowPlayingInfo
}
@IBAction func startPlayingButtonPressed(_ sender: Any)
{
self.player.play()
}
OLD ОТВЕТ IOS 8.2:
ответ Патрика совершенно прав.
Но я буду писать то, что я делаю для ИОС 8.2:
добавить свои приложения Info.plist необходимые режимы фона , как показано ниже:
И в моей AppDelegate.h i add these import:
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
Тогда в моей AppDelegate.m я написал didFinishLaunchingWithOptionsthis приложения точно, как показано ниже:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
return YES;
}
Теперь приложение поддерживает воспроизведение музыки, даже если экран заблокирован :)
Смотрите мой ответ в этом Que, вы найдете ваше решение [Нажмите здесь для просмотра ответа] [1 ] [1]: http: // stackoverflow.com/questions/15470452/is-it-possible-to-play-video-using-avplayer-in-background –