Я пытаюсь выполнить вибрацию в приложении, подобном Snapchat, который использует как аудиовыход, так и вход, а также поддерживает микширование звука из других приложений, но это, кажется, сложнее, чем я первоначально подумал, что это будет. Важно знать, что я не пытаюсь вибрировать во время воспроизведения или записи. Прочитав всю документацию, которую я мог найти на эту тему, это то, что я пришел, чтобы понять:Выполнение вибрации в приложении для записи
- Для поддержки воспроизведения и записи (ввод и вывод), мне нужно использовать
AVAudioSessionCategoryPlayAndRecord
- Making телефон вибрирует через
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate)
не поддерживается ни в одной из категорий записи, включаяAVAudioSessionCategoryPlayAndRecord
. - Включение других приложений для воспроизведения аудио может быть выполнено путем добавления опции
AVAudioSessionCategoryOptionMixWithOthers
.
Поэтому я делаю это в моем приложении делегат:
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:&error];
возможных решений делает вибрацию, что я пытался, но не на это:
деактивация общий
AVAudioSession
перед вибрацией, а затем активировать его сразу после.[[AVAudioSession sharedInstance] setActive:NO error:nil]; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); [[AVAudioSession sharedInstance] setActive:YES error:nil];
Это успешно выполняет вибрацию, но потом, когда я пытаюсь записать фильм, звук будет пригнулся (или что-то другое, заставляя его быть очень тихо). Это также дает мне сообщение о том, что мне не разрешено деактивировать сеанс, не удаляя сначала его устройства ввода-вывода.
Изменение категории перед вибрацией, а затем ее изменение.
[[AVAudioSession sharedInstance] setActive:NO error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); [[AVAudioSession sharedInstance] setActive:NO error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil];
Это решение возникает время от времени, но, похоже, не работает для меня. Никакой вибрации не происходит, даже если категории, похоже, установлены. Это все равно может быть правильным решением, если я установил
usesApplicationAudioSession = YES
на мой AVCaptureSession, но я еще не сделал его работу.
Источники:
Есть ли 'AVAudioRecorder' экземпляр запись при попытке вибрировать? – spassas