Как установить звуковое локальное оповещение из песни в iTunes? - PullRequest
7 голосов
/ 01 августа 2011

Я пытаюсь создать приложение для будильника, но я не знаю, как настроить песню из iTunes на звучание локального уведомления.

Теперь я использую этот код для вызова iTunes

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0) {
        MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];

        picker.delegate = self;
        picker.allowsPickingMultipleItems = NO;
        picker.prompt = NSLocalizedString (@"Select any song from the list", @"Prompt to user to choose some songs to play");

        //[self presentModalViewController: picker animated: YES];
        [self.navigationController pushViewController:picker animated:YES];

        NSLog(@"gsudifghukdsf");
        [picker release];

    }
}

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
{
    [self.navigationController popToRootViewControllerAnimated:YES];
    //[self dismissModalViewControllerAnimated: YES];
    NSLog(@"%@",mediaItemCollection);

    UILocalNotification *local = [[UILocalNotification alloc] init];
    //selectedSongCollection=mediaItemCollection; 

}

- (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker
{    
    [self.navigationController popToRootViewControllerAnimated:YES];
    //[self dismissModalViewControllerAnimated: YES]; 
}

, и что-то о локальном уведомлении выглядит следующим образом

 UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    if (localNotif == nil)
    {   //NSLog(@"Get in if localNotif");
        return;
    }

    localNotif.fireDate = DateAlarm;

    localNotif.timeZone = [NSTimeZone defaultTimeZone];

    // Notification details
    localNotif.alertBody = [NSString stringWithFormat:@"%@",DateAlarm];
    // Set the action button
    localNotif.alertAction = @"Oh Shit";



    localNotif.soundName = UILocalNotificationDefaultSoundName;

Так что, пожалуйста, объясните мне, как установить песню вместный звук ??

Ответы [ 2 ]

9 голосов
/ 26 января 2012

Вы можете использовать только звуки, входящие в основной комплект, т. Е. Они были в сборке приложения при отправке в магазин приложений.

Да, вы можете записывать звук, загружать звук и т. Д. В приложение, но ни один из этих звуковых файлов, созданных / сохраненных, не может быть использован, поскольку их нет в комплекте приложения. Если приложение использует пользовательские звуки, получая доступ к ним за пределами пакета, то для этого они используют частные API. Поверь мне, я перепробовал все возможные варианты.

2 голосов
/ 06 июня 2013

Как отмечает @thephatp, уведомление (локальное или удаленное) может запускать только воспроизведение звуков, входящих в комплект приложения.Я не вижу возможности обойти это.

@ r3dsm0k3 спрашивает в своем комментарии, как такие приложения, как Rise , запускают воспроизведение звуков, которых нет в комплекте приложений. Если бы мне пришлось угадывать, я бы сказал, что Rise регистрируется как приложение, для которого требуется audio фоновый режим :

Объявление поддерживаемых фоновых задач вашего приложения

Поддержка некоторых типов фонового выполнения должна быть заранее объявлена ​​приложением, которое их использует.Приложение заявляет о поддержке службы, используя свой файл Info.plist.Добавьте ключ UIBackgroundModes в файл Info.plist и установите для него значение массива, содержащего одну или несколько из следующих строк:

audio - приложение воспроизводит звуковой контент для пользователя в фоновом режиме.(Этот контент включает потоковое аудио или видео с использованием AirPlay.)

Это фактически означает, что Rise разрешено постоянно работать.Это разрешено, потому что он воспроизводит аудио от имени пользователя.То, что он не воспроизводит звук 100% времени, не является проблемой для Apple.

Rise может использовать или не использовать UILocalNotifications.Скорее всего, они используют их только в качестве резервной копии, если приложение НЕ выгружается, а вместо этого используют другой механизм таймера для запуска последовательности тревожных сигналов.

...