Как начать и остановить диктовку в Apple Watch без нажатия кнопки

Я написал код для использования диктовки на своих Apple Watch. Я использовал presentTextInputControllerWithSuggestions без предложений, чтобы напрямую начать диктовку.

Но у меня есть две проблемы:

  • Я хочу начать диктовку при запуске моего приложения. Для этого я вызываю свою функцию в методе willActivate, но при этом у меня на экране появляется просто ожидающее изображение, а не первая страница с диктовкой.
  • Я хочу остановить диктовку, не нажимая кнопку «Готово». Я не знаю, возможно ли это и как я могу это сделать.

Есть мой код:

func dictation(){
        self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{
            (results) -> Void in
                 //myCode
            })
    }
override func willActivate(){
   super.willActivate()
   dictation()
}

У вас есть решения?


person Pierre Charpentier    schedule 13.07.2016    source источник
comment
Связано: stackoverflow.com/questions/35268552/   -  person    schedule 13.07.2016
comment
Что произойдет, если вы опубликуете вызов на диктовку после небольшой задержки или в didAppear?   -  person Feldur    schedule 13.07.2016
comment
@Feldur Я печатаю журнал, когда начинаю и заканчиваю функцию. Вот мои журналы: start init end init start awakeWithContext end awakeWithContext start willactivate end willactivate start didAppear start dictation end didAppear и у меня всегда есть экран ожидания   -  person Pierre Charpentier    schedule 14.07.2016


Ответы (1)


Спасибо за вашу помощь @Feldur

Я пробовал с задержкой, и это, кажется, работает

Есть мой код:

override init(){
    super.init()
    print("start init")
    let seconds = 1.0
    let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
    let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(dispatchTime, dispatch_get_main_queue(), {
        self.dictation()
    })
    print("end init")
}

Есть мои логи:

start init
end init
start awakeWithContext
end awakeWithContext
start willactivate
end willactivate
start didAppear
end didAppear
start dictation

Появляется мой экран, а затем начинается моя диктовка.

У вас есть идея остановить диктовку, когда пользователь перестанет говорить?

person Pierre Charpentier    schedule 14.07.2016
comment
Вам нужно будет обработать аудиопоток в поисках тишины (отсутствия энергии) - person Feldur; 14.07.2016
comment
Спасибо. Знаете ли вы, есть ли API или собственный компонент для этого? - person Pierre Charpentier; 14.07.2016
comment
Я не. Может в АВ? Если вы погуглите о спектрах мощности, вы сможете найти математику. - person Feldur; 14.07.2016
comment
В порядке. Я плохо искать больше таким образом. Если у кого-то есть другая идея - person Pierre Charpentier; 14.07.2016
comment
Мне удалось обнаружить тишину (точнее, периоды времени, когда громкость ниже порогового значения) с помощью библиотеки под названием EZAudio (также позволяет создавать анимированный график формы голосовой волны), к сожалению, сейчас она прекращена, но вы все еще можете использовать его. Проблема в том, что я мог использовать его только для приложений iPhone, потому что WatchOS жалуется, что архитектура EZAudio не поддерживается, и теперь у меня есть идея, как ее перекомпилировать. - person Josh; 02.08.2016