Вариант WatchKit ТОЛЬКО для диктовки?

Я использую:

 NSArray* initialPhrases = @[@"Let's do lunch.", @"Can we meet tomorrow?", @"When are you free?"];
    [self presentTextInputControllerWithSuggestions:initialPhrases
                                   allowedInputMode:WKTextInputModePlain
                                         completion:^(NSArray *results) {
                                             if (results && results.count > 0) {
                                                 id aResult = [results objectAtIndex:0];
                                                 // Use the string or image.
                                             }
                                             else {
                                                 // Nothing was selected.
                                             }
                                         }];

Это пример, данный Apple для ввода текста. Однако в моем приложении я хочу, чтобы у пользователя была ТОЛЬКО возможность диктовать текст. Если я установлю массив равным нулю, кнопки диктовки не будет, но если я оставлю массив в покое, кнопка диктовки снова появится. Есть ли вообще способ сделать ввод текста ТОЛЬКО под диктовку?

ОБНОВЛЕНИЕ: у Apple есть документация, в которой говорится, что если вы отправляете пользователей прямо на диктовку, не давать никаких ответов и отправлять их прямо туда. Правильно ли я понимаю, что причина, по которой я ничего не вижу, когда initialPhrases равен нулю, связана только с ограничениями симулятора?


person user717452    schedule 20.03.2015    source источник


Ответы (2)


Ты прав. Евангелисты-разработчики на форумах отмечают, что симулятор ничего не показывает для диктовки из-за отсутствия поддержки.

Убедитесь, что вы используете WKTextInputModePlain, а массив suggestions равен nil, и все будет в порядке.

person bgilham    schedule 20.03.2015
comment
Спасибо. Всегда сложно разрабатывать продукт, на котором вы еще не можете его протестировать. - person user717452; 20.03.2015

Что касается WatchOS 2.1 и iOS 9, я смог сделать то, что вы предлагаете, двумя разными способами, поставить мне зеленую галочку и проголосовать, если это сработает !!:

ВАРИАНТ 1 — ЗАПИСАТЬ ФАЙЛ WAV И ЗАГРУЗИТЬ НА СЕРВЕР ASR Я записал и сохранил файл WAV на Apple Watch. После этого я загрузил файл в платный провайдер распознавания речи, и все заработало нормально! Вот код для записи, замените строки кода обновления пользовательского интерфейса (и строки отладки) своими собственными:

//RECORD AUDIO SAMPLE
    var saveUrl: NSURL? //this var is initialized in the awakeWithContext method//
    func recordAudio(){
        let duration = NSTimeInterval(5)
        let recordOptions =
        [WKAudioRecorderControllerOptionsMaximumDurationKey : duration]
       // print("Recording to: "+(saveUrl?.description)!)
        //CONSTRUCT AUDIO FILE URL
        let fileManager = NSFileManager.defaultManager()
        let container = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.artivoice.applewatch");
        let fileName = "audio.wav"
        saveUrl = container?.URLByAppendingPathComponent(fileName)
        presentAudioRecorderControllerWithOutputURL(saveUrl!,
            preset: .WideBandSpeech,
            options: recordOptions,
            completion: { saved, error in
                if let err = error {
                    print(err.description)
                    self.sendMessageToPhone("Recording error: "+err.description)
                }
                if saved {
                    self.btnPlay.setEnabled(true)
                    self.sendMessageToPhone("Audio was saved successfully.")
                    print("Audio Saved")
                    self.uploadAudioSample()
                }
        })
    }

ВАРИАНТ 2 - ИСПОЛЬЗУЙТЕ СОБСТВЕННОЕ РАСПОЗНАВАНИЕ РЕЧИ В iWATCH В этом подходе я беру исходное голосовое меню, но...! Я не добавляю никаких кнопок, только чистый ASR. Я запустил пустое голосовое меню, а затем восстановил строку, возвращенную ASR. Вот код, наслаждайтесь:

func launchIWatchVoiceRecognition(){
     //you can see the empty array [], add options if it suits you well
        self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{(results) -> Void in
            let aResult = results?[0] as? String
            if(!(aResult == nil)){
                print(aResult) //print result
                self.sendMessageToPhone("Native ASR says:  "+aResult!)
                dispatch_async(dispatch_get_main_queue()) {
                    self.txtWatch.setText(aResult) //show result on UI
                }
            }//end if
        })//end show voice menu
    }

ВАРИАНТ 2 работает молниеносно, но ВАРИАНТ 1 может быть более удобным, если вы хотите использовать некоторые расширенные функции распознавания речи (пользовательские словари, грамматика...). Я бы рекомендовал ВАРИАНТ 1 для большинства пользователей. Вуаля!! Если вам нужны дополнительные подсказки, дайте мне знать!

person Josh    schedule 08.02.2016