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, вам необходимо настроить его.

Другие вопросы по тегам