iPhone - проигрывать звук будильника, пока приложение в фоновом режиме - PullRequest
3 голосов
/ 21 февраля 2012

Знаете ли вы, как воспроизводить звук будильника, когда iPhone спит, как встроенное приложение часов в iPhone?

ОЧЕНЬ ВАЖНОЕ РЕДАКТИРОВАНИЕ:
во встроенном приложении Часы в iPhone
если звучит сигнал будильника, если пользователь переключает переключатель «Без звука» в режим «Без звука» (режим вибрации),
Звук будильника продолжает звучать.

Вы знаете, как сделать то же самое?

Ответы [ 5 ]

3 голосов
/ 23 августа 2012

этот код поможет вам воспроизводить музыку в фоновом режиме: Звуковой файл музыки должен быть только 30 секунд 30-секундный звуковой файл с поддержкой уведомлений, и он должен быть в папке пакета, если он находится в папке с документами, тогда вы должны указать путь к звуковому файлу

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSString *dateValueRemaining =[NSString stringWithFormat:@"23/08/2012 11:30:33"];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
NSDate *dateRemaining = [dateFormat dateFromString:dateValueRemaining];
NSDate *pickerDate = dateRemaining;
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit
                                                         | NSMonthCalendarUnit
                                                         | NSDayCalendarUnit)
                                               fromDate:pickerDate];
NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit
                                                         | NSMinuteCalendarUnit
                                                         | NSSecondCalendarUnit)
                                               fromDate:pickerDate];
// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];
[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
NSLog(@"itemDate: %@", itemDate);
if (localNotif) {
    [[UIApplication sharedApplication] cancelLocalNotification:localNotif];
}
localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil) {
    return;
}
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = @"Your Time is Over";
localNotif.alertAction = @"View";
//---THIS SONG FILE IN THE NSBUNDLE FOLDER---------//
localNotif.soundName = @"s1.mp3";
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
localNotif.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
2 голосов
/ 21 февраля 2012

Кнопка set подключена для запуска метода с именем scheduleNotification в контроллере представления, который использует класс UILocalNotification для планирования уведомления. Код выглядит следующим образом:

(void)scheduleNotification
{
    [reminderText resignFirstResponder];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    Class cls = NSClassFromString(@"UILocalNotification");
    if (cls != nil)
    {
        UILocalNotification *notif = [[cls alloc] init];
        notif.fireDate = [datePicker date];
        notif.timeZone = [NSTimeZone defaultTimeZone];
        notif.alertBody = @"Did you forget something?";
        notif.alertAction = @"Show me";
        notif.soundName = UILocalNotificationDefaultSoundName;
        notif.applicationIconBadgeNumber = 1;
        NSDictionary *userDict = [NSDictionary dictionaryWithObject:reminderText.text 
              forKey:kRemindMeNotificationDataKey];
        notif.userInfo = userDict;
        [[UIApplication sharedApplication] scheduleLocalNotification:notif];
        [notif release];
    }
}
1 голос
/ 04 мая 2012

Итак, глядя на приложение i-qi, скорее всего, они установили свои UIBackgroundModes на «audio» в своем info.plist. Это означает, что они могут воспроизводить аудио в фоновом режиме. Вероятно, они воспроизводят тихий звук до тех пор, пока не закончится таймер, потому что сеансы фонового звука прервутся, если они не будут использоваться.

С точки зрения беззвучного переключения, это, вероятно, зависит от категории сеанса, которую они используют. Проверьте этот ресурс: http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html#//apple_ref/doc/uid/TP40007875-CH4-SW1

1 голос
/ 18 марта 2012

Прежде чем приложение перейдет в фоновый режим, воспроизведите тихий звук с помощью AVAudioPlayer и оставьте его воспроизводиться бесконечное количество раз.И когда ваше уведомление активируется, снова используйте AVAudioPlayer для воспроизведения звука уведомления, а не объект UILocalNotification.У меня это сработало.

0 голосов
/ 21 февраля 2012

Единственный способ - использовать local Notifications или Push notifications .. оба позволяют воспроизводить звуки в течение 30 секунд

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...