1

Можно ли использовать AVSpeechSynthesizer в расширении приложения?Работает ли AVSpeechSynthesizer в расширениях приложений?

Я добавил расширение приложения для приложения в приложение, а на отображаемом контроллере по умолчанию я добавил код ошибки в hook - (void)viewDidAppear:(BOOL)animated, чтобы узнать, могу ли я заставить синтезатор речи сказать @ Hello World "Но, похоже, это не звучит.

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

- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance

вызывается. а затем через несколько секунд позже

- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance

Это, кажется, показывают, что все работает правильно, но ни один звук не выводится (мой объем вверх).

Я попытался добавить тот же фрагмент кода в свое приложение (содержащее приложение), и он говорит тексты, как ожидалось.

Я понимаю, что некоторые рамки не доступны для расширений приложений, как указано в documentation. Но AVFoundation, похоже, ничего не говорит о том, что он недоступен для расширений приложений.

Любые идеи были бы оценены.

Заранее благодарен!

AVSpeechSynthesizer *s = [[AVSpeechSynthesizer alloc] init]; 
AVSpeechUtterance *u = [[AVSpeechUtterance alloc] initWithString:@"Hello World!"]; 
[s speakUtterance:u]; 

ответ

1

Да, так оно и есть. У меня есть расширение действия, которое работает с сафари и говорит содержание веб-сайта с помощью AVSpeechSynthesizer, и странно, что я даже не включил фоновый звук для приложения, когда пытался. Расширение было успешно активировано и начало читать содержимое DOM.

Одна вещь, которую вы должны быть осторожны, - это обмен данными между контейнером и расширением. Вам необходимо будет иметь