Доступ к библиотеке музыки ipod и отображение списка звуков с длиной - PullRequest
0 голосов
/ 19 июня 2011

Я пытаюсь получить доступ к музыкальной библиотеке iPod и после этого создаю локальное уведомление, когда мое приложение находится в фоновом режиме.Я хочу воспроизвести выбранный звук в локальном уведомлении.Моя проблема - Apple разрешает только те файлы, которые менее 30 секунд.в длину.

Так есть ли способ получить список только тех звуков, длина которых менее 30 секунд?

Если я получу этот список, мне нужно скопировать выбранный медиа-файл в свой пакет ресурсов.Тогда я могу сделать это в моем местном уведомлении.до и до тех пор, пока есть какой-либо способ передачи элемента мультимедиа непосредственно в локальное уведомление.

Спасибо всем за помощь ..

1 Ответ

0 голосов
/ 09 апреля 2013

Если вы хотите, чтобы элементы были только в разделе "музыка" (не подкасты или рингтоны), примерно так должно работать:

MPMediaQuery * query = [MPMediaQuery songsQuery];
NSArray * items = [query items];
NSPredicate * predicate = [NSPredicate predicateWithBlock:
   ^(id evaluatedObject, NSDictionary *bindings){
     MPMediaItem * item = evaluatedObject;
     NSNumber * duration = [item valueForProperty:MPMediaItemPropertyPlaybackDuration];
     return [duration doubleValue] < 30;
   }];
NSArray * filteredItems = [items filteredArrayUsingPredicate:predicate];

К сожалению, MPMediaPropertyPredicate не позволяет нам фильтровать по «длительности менее 30 секунд» (типы сравнения: «EqualTo» и «Contains»), поэтому мы делаем это вручную выше.

Затем вам нужно экспортировать нужную дорожку, используя AVAssetExportSession. Возможно, вам потребуется преобразовать его в один из поддерживаемых форматов в Руководство по программированию локальных и push-уведомлений . Я также предлагаю использовать фиксированное имя файла, чтобы было легче отслеживать созданные вами файлы.

Наконец, вы не можете писать в свой пакет приложений, поскольку это делает подпись кода недействительной (очевидно, вы раньше могли; возможно, подпись проверяется только во время установки). Тем не менее, вы могли бы иметь возможность использовать относительный путь, например ../Library/Application Support/MyApp/MySound.mp4.

Обратите внимание, что это не гарантированно работает и может не пройти проверку приложения! В частности,

  • Нет гарантии, что путь начнется с ../Library. Алгоритм генерации относительных путей выходит за рамки этого ответа. (Абсолютный путь, вероятно, не будет работать, поскольку он не работает с -[NSString stringByAppendingPathComponent:].)
  • Нет гарантии, что UILocalNotification.soundName примет путь; в документации просто говорится, что он принимает «имя файла (включая расширение) звукового ресурса в основном комплекте приложения».
...