CẬP NHẬT IOS 11,2 với Swift 4:
Bây giờ nếu bạn đang sử dụng AVPlayer để chơi nhạc các tệp bạn cũng nên định cấu hình MPNowPlayingInfoCenter.default()
để hiển thị thông tin đang phát trên màn hình khóa.
Dưới đây mã sẽ hiển thị bây giờ phát các điều khiển trên màn hình nhưng nó sẽ không thể trả lời bất kỳ lệnh nào.
Nếu bạn cũng muốn điều khiển để làm việc bạn nên kiểm tra dự án mẫu táo ở đây: https://developer.apple.com/library/content/samplecode/MPRemoteCommandSample/Introduction/Intro.html#//apple_ref/doc/uid/TP40017322
của Apple mẫu mã bao gồm tất cả nhưng tôi thấy nó khó hiểu.
Nếu bạn muốn phát âm thanh và hiển thị các điều khiển trên màn hình khóa, các bước này sẽ hoạt động tốt.
LƯU Ý QUAN TRỌNG: Nếu bạn là KHÔNG sử dụng AVPlayer để chơi âm thanh. Nếu bạn đang sử dụng một số thư viện của bên thứ ba để tạo âm thanh hoặc phát lại tệp âm thanh, bạn nên đọc các nhận xét bên trong mã. Ngoài ra nếu bạn đang sử dụng ios giả lập 11,2, bạn sẽ không thể nhìn thấy bất kỳ điều khiển trên màn hình khóa. Bạn nên sử dụng một thiết bị để xem nó hoạt động.
1- Chọn dự án -> capabilites -> thiết lập chế độ nền ON -> đánh dấu Audio, AirPlay và Picture in Picture
2- AppDelegate.swift tập tin sẽ giống như thế này:
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 nên xem xét như thế này:
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 ĐÁP IOS 8.2:
câu trả lời Patrick là hoàn toàn đúng đắn.
Nhưng tôi sẽ ghi những gì tôi làm cho ios 8.2:
tôi thêm info.plist chế độ nền cần ứng dụng của tôi như dưới đây:
Và trong tôi AppDelegate.h tôi thêm các mục nhập này:
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
Sau đó, trong AppDelegate.m tôi i viết didFinishLaunchingWithOptionsthis ứng dụng hệt như dưới đây:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
return YES;
}
Bây giờ App giữ chơi nhạc ngay cả khi màn hình bị khóa :)
Xem câu trả lời của tôi trong Quế này, bạn sẽ tìm thấy giải pháp của bạn [Nhấn vào đây để Xem trả lời] [1 ] [1]: http: // stackoverflow.com/questions/15470452/is-it-possible-to-play-video-sử dụng-avplayer-in-background –