iOS музыка началась с фона
Я думаю о приложении для iOS. Во время будильника я хочу воспроизводить пользовательскую музыку из Apple Music или другого источника.
К сожалению, фоновые операции приложения действительно ограничены, а уведомления позволяют воспроизводить только связанные музыкальные файлы. Есть ли способ достичь моей цели, используя фоновые задачи или что-то еще?
1 ответ
Нет другого выбора, кроме как использовать уведомления, см. Также: Фоновое выполнение
Изменить звук уведомления.
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, вам необходимо настроить его.