Я пытаюсь использовать Google Speech Recognition внутри моего приложения (лаунчер). Когда я пытаюсь использовать его для коротких команд, таких как Вызов X или произнесение короткого номера, такого как 123456789 , все работает нормально, но как только я пытаюсь дать более длинный ввод (который требует больше времени, чтобы сказать) На экране висит действие по распознаванию речи, и оно ничего не делает.
Мне не удалось найти ничего полезного в журналах, и я не знаю, делаю ли я что-то не так при инициализации распознавания речи.
Вот когда я его инициализирую:
var intent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
intent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
StartActivityForResult(intent, SpeechResult);
И вот где я использую результат
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == SpeechResult && data != null)
{
var text = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
getterForNumber = text[0];
getterForNumber = getterForNumber.Replace(" ", String.Empty);
bool inInt = getterForNumber.All(char.IsDigit);
if (!inInt)
{
var activity2 = new Intent(this, typeof(fittizioAct));
activity2.PutExtra("fittizioData", "Cannot Recognise the Number");
activity2.PutExtra("direzione", "vocale");
StartActivity(activity2);
Finish();
}
else
{
var passNameAndNumberRubr = new Intent(this, typeof(VocalSavedAct));
passNameAndNumberRubr.PutExtra("saveNumberRubr", getterForNumber);
passNameAndNumberRubr.PutExtra("saveNameRubr", getterForName);
//sqldbRubrica.AddRecord(getterForName, getterForNumber);
StartActivity(passNameAndNumberRubr);
Finish();
}
}
else if (requestCode == SpeechResult && data == null)
{
AudioManager vol = (AudioManager)this.GetSystemService(Context.AudioService);
int volume = vol.GetStreamVolume(Android.Media.Stream.Music);
CrossTextToSpeech.Current.Speak("Voice Command Canceled",
pitch: 1,
speakRate: speed,
volume: (float)volume,
crossLocale: locale);
}
}
P.S. Код написан на C #, потому что я использую Xamarin.