Как играть в системный звук на iOS без вибрации? - программирование
Подтвердить что ты не робот

Как играть в системный звук на iOS без вибрации?

В документации AudioServicesPlayAlertSound говорится, что я могу отключить вибрацию при воспроизведении звука:

iPhone воспроизводит указанный звук. Если пользователь настроил Приложение настроек для вибрации на кольце, также вызывает вибрацию. Однако устройство не вибрирует, если аудиозапись приложений с помощью AVAudioSessionCategoryPlayAndRecord или Категория аудиозаписей AVAudioSessionCategoryRecord.

Тем не менее, я все еще чувствую вибрацию на своем iPhone 4S (iOS 5.1.1) даже после того, как моя категория была "играть и записывать". Он колеблется и вибрирует одновременно.

#import <AudioToolbox/AudioServices.h>
#import <AVFoundation/AVAudioSession.h>

NSError* error;
[[AVAudioSession sharedInstance]
    setCategory:AVAudioSessionCategoryPlayAndRecord
    error:&error];
if (error == nil) {
    AudioServicesPlayAlertSound(1000);
}

Я также пробовал AudioServicesPlaySystemSound, но результаты те же. Причина, по которой я хочу отключить вибрацию, заключается в том, что я создаю приложение, в котором пользователь должен поместить свой телефон далеко, а телефон не должен свертываться из-за вибрации.

4b9b3361

Ответ 1

Я тестировал это с помощью iPhone 4, и он делает именно то, что вы хотите.

   NSError* error;
    [[AVAudioSession sharedInstance]
     setCategory:AVAudioSessionCategoryPlayAndRecord
     error:&error];
    if (error == nil) {
        SystemSoundID myAlertSound;
        NSURL *url = [NSURL URLWithString:@"/System/Library/Audio/UISounds/new-mail.caf"];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &myAlertSound);

        AudioServicesPlaySystemSound(myAlertSound);

    }

Используйте AudioServicesCreateSystemSoundID для создания SystemSoundID с использованием имени файла системного звука. Затем используйте AudioServicesPlaySystemSound() для воспроизведения звука без вибрации. Имена других звуков системы можно найти по ссылке ниже.

http://iphonedevwiki.net/index.php/AudioServices

Ответ 2

Вы пытались сыграть свой собственный звуковой эффект вместо встроенного Apple?

Если вы загружаете аудиофайл в свое приложение, вы можете легко его использовать с помощью рамки AudioToolBox и вам больше не нужно беспокоиться о вибрации.

#import <AudioToolbox/AudioServices.h>    

//Initialise your soundID (your app delegate is a good place for this)    
SystemSoundID soundToPlay;

NSString *path  = [[NSBundle mainBundle] pathForResource:@"<YourFileName>" ofType:@"aif"];
NSURL *pathURL = [NSURL fileURLWithPath : path];
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &soundToPlay);

//playback
AudioServicesPlaySystemSound(soundToPlay);