Подтвердить что ты не робот

Воспроизводить звук локального уведомления по умолчанию при отображении UIAlertView?

Я пишу приложение напоминаний для iPhone, которое отображает напоминания, используя локальные уведомления.

Если напоминание отключается во время работы приложения, локальное уведомление не отображается. Вместо этого метод didReceiveLocalNotification вызывается в моем делете приложения, и я имитирую локальное диалоговое окно уведомлений, отображая UIAlertView с текстом напоминания.

Когда локальные уведомления отображаются вне приложения, устройство вибрирует и воспроизводится звук, указанный UILocalNotificationDefaultSoundName. Опять же, я хотел бы подражать этому в приложении при отображении UIAlertView.

Я могу вибрировать устройство, вызвав AudioServicesPlaySystemSound(kSystemSoundID_Vibrate), но я не могу понять, как воспроизводить звук локального уведомления по умолчанию. Там нет эквивалентной константы SystemSoundID, и я не уверен, каким будет путь.

tl; dr Я хочу воспроизвести звук локального уведомления по умолчанию при отображении UIAlertView. Любые идеи?

4b9b3361

Ответ 1

Хороший вопрос. В идеале, можно было бы выбрать системный звук с помощью AudioServices. Однако в следующем заявлении от Apple "Справочник по сервисным службам системы" указано иное:

В Mac OS X, когда пользователь имеет настроенные системные настройки для экран для предупреждений или звук не может быть оказана, называя это функция приведет к экрану мигает. В Mac OS X пройдите постоянная kSystemSoundID_UserPreferredAlert to воспроизведите звуковой сигнал, выбранный пользователя в системных настройках. В iOS нет предпочтительного предупреждения пользователя звук.

Поскольку похоже, что SDK мало что может предложить, вы можете захотеть имитировать системные звуки, используя свой собственный wav файл. Есть хорошая библиотека по следующей ссылке, возможно, у нее будет звук, который вы ищете: http://sites.google.com/site/iphonesounds/iPhoneOriginalSystemSounds_WAV.zip

Удачи!

Ответ 2

Вы можете воспроизводить звук уведомления по умолчанию следующим образом:

AudioServicesPlaySystemSound(1315);

В этой ссылке вы найдете список идентификаторов, которые вы можете использовать в качестве параметра AudioServicesPlaySystemSound (id).

Хорошее кодирование!

Ответ 3

Установить делегат в файле .h:

@interface ViewController : UIViewController <UIAlertViewDelegate>
{
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

@end

И установите метод, описанный выше.

И в .m файле сделайте следующее:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ma.mp3", [[NSBundle mainBundle] resourcePath]]];

    NSError *error;

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 

    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = -1;


    [audioPlayer play];

    [alert show]; 
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex==0) {
        [audioPlayer stop];

    }
    NSLog(@"U HAVE CLICKED BUTTON");
}

Ответ 4

Это дополнение к ответу Andrew Little.

Чтобы лучше подражать звуку уведомления, вам также необходимо настроить сеанс аудио:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil];

Это важно, когда, например, вы слушаете музыку и получаете уведомление во время этого.

Параметры сеанса выше выглядят так же, как и при воспроизведении звука, когда уведомление срабатывает с приложением в фоновом режиме:

  • музыка отключается до и возобновляется после звука уведомления.
  • переключатель молчания устройства обрабатывается правильно - звук воспроизводится только при включенном переключателе
  • том то же самое (обратите внимание, что вы можете получить разный том, если вы используете системный звук, когда приложение в фоновом режиме и файлы из ответа Andrew Little)