Нет другого выбора, кроме как использовать уведомления, см. Также: Фоновое выполнение
Изменить звук уведомления.
1. Импорт аудиофайлов.
Посетите музыкальную библиотеку iPod
let mediaquery = MPMediaQuery()
// MPMusicPlayerControllerNowPlayingItemDidChangeNotification
if let musics = mediaquery.items {
for music in musics {
let title = music.valueForProperty(MPMediaItemPropertyTitle) as? String
if let url = music.assetURL {
saveNotificationSound(url,name: title,isLast: music == musics.last)
}
}
}
Важным параметром является assetURL
, по нему можно получить аудиофайл. ВНИМАНИЕ: Если музыка загружается из Apple Music или в iCloud, она assertURL
равна нулю.
Использовать общий доступ к файлам
Как включить общий доступ к файлам для моего приложения
2. Обрезать звук до 30 с и указать формат для уведомления
Поскольку уведомление ограничено: 1. Продолжительность не более 30 с; 2. Формат ограничен, мы сокращаем его до m4a
.
/**
Cut the duration and convert to m4a, than save it.
- parameter audioPath: Source file path
- parameter startTime: Cut start time
- parameter endTime: Cut end time
- parameter saveDirect: ...
- parameter handler: ...
*/
func cutoffAudio(audioPath: NSURL, startTime: Int64, endTime: Int64, saveDirect:NSURL, handler: (succeed: Bool) -> Void){
let audioAsset = AVURLAsset(URL: audioPath, options: nil)
if let exportSession = AVAssetExportSession(asset: audioAsset, presetName: AVAssetExportPresetAppleM4A){
let startTime = CMTimeMake(startTime, 1)
let stopTime = CMTimeMake(endTime, 1)
exportSession.outputURL = saveDirect
// Output is m4a
exportSession.outputFileType = AVFileTypeAppleM4A
exportSession.timeRange = CMTimeRangeFromTimeToTime(startTime, stopTime)
exportSession.exportAsynchronouslyWithCompletionHandler({
handler(succeed: exportSession.status == .Completed)
})
}
}
3. Установить как звук уведомления
Внимание: Пользовательские аудиофайлы можно поместить только в /Library/Sounds
в приложении Песочница , тогда как soundName
необходимо указать только имя файла (включая расширение) , аудио файлы, как в основном комплекте.
Вот демоверсия от github.com/ToFind1991
Код не совместим с текущей версией Swift, его необходимо настроить.