Воспроизвести локальный звук уведомления по умолчанию при отображении UIAlertView? - PullRequest
40 голосов
/ 19 июля 2010

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

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

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

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

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

Ответы [ 4 ]

67 голосов
/ 19 августа 2010

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

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

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

Удачи!

22 голосов
/ 10 июля 2015

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

AudioServicesPlaySystemSound(1315);

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

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

3 голосов
/ 24 октября 2012

Установить делегата в файле .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");
}
2 голосов
/ 16 июля 2013

Это дополнение к ответу Эндрю Литтла.

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

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

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

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

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