I want to disable the popup from Google Speech. I want it to run in the background so no popup should come up. I am programming in Visual Studio with c# and i want to make a Speech Recognition App on/in Android.
I downloaded the sample code from the Xamarin page
Code:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// set the isRecording flag to false (not recording)
isRecording = false;
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
// get the resources from the layout
recButton = FindViewById<Button>(Resource.Id.btnRecord);
textBox = FindViewById<TextView>(Resource.Id.textYourText);
// check to see if we can actually record - if we can, assign the event to the button
string rec = Android.Content.PM.PackageManager.FeatureMicrophone;
if (rec != "android.hardware.microphone")
{
// no microphone, no recording. Disable the button and output an alert
var alert = new AlertDialog.Builder(recButton.Context);
alert.SetTitle("You don't seem to have a microphone to record with");
alert.SetPositiveButton("OK", (sender, e) =>
{
textBox.Text = "No microphone present";
recButton.Enabled = false;
return;
});
alert.Show();
}
else
{
recButton.Click += delegate
{
// change the text on the button
recButton.Text = "End Recording";
isRecording = !isRecording;
if (isRecording)
{
// create the intent and start the activity
var voiceIntent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
// put a message on the modal dialog
voiceIntent.PutExtra(RecognizerIntent.ExtraPrompt, Application.Context.GetString(Resource.String.messageSpeakNow));
// if there is more then 1.5s of silence, consider the speech over
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputCompleteSilenceLengthMillis, 1500);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputPossiblyCompleteSilenceLengthMillis, 1500);
voiceIntent.PutExtra(RecognizerIntent.ExtraSpeechInputMinimumLengthMillis, 15000);
voiceIntent.PutExtra(RecognizerIntent.ExtraMaxResults, 1);
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguage, Java.Util.Locale.German);
// you can specify other languages recognised here, for example
// if you wish it to recognise the default Locale language and German
// if you do use another locale, regional dialects may not be recognised very well
voiceIntent.PutExtra(RecognizerIntent.ExtraLanguage, Java.Util.Locale.Default);
StartActivityForResult(voiceIntent, VOICE);
}
};
}
}
protected override void OnActivityResult(int requestCode, Result resultVal, Intent data)
{
if (requestCode == VOICE)
{
if (resultVal == Result.Ok)
{
var matches = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
if (matches.Count != 0)
{
string textInput = textBox.Text + matches[0];
// limit the output to 500 characters
if (textInput.Length > 500)
textInput = textInput.Substring(0, 500);
textBox.Text = textInput;
}
else
textBox.Text = "No speech was recognised";
// change the text back on the button
recButton.Text = "Start Recording";
}
}
base.OnActivityResult(requestCode, resultVal, data);
}
Can someone help me to disable the popup?
You can implement the SpeechRecognizer
for your app. The implementation of this API is likely to stream audio to remote servers to perform speech recognition.
Your app needs to have the RECORD_AUDIO
permission.
For example:
public class MainActivity : Activity, IRecognitionListener
{
private TextView tv;
private SpeechRecognizer sr;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
sr = SpeechRecognizer.CreateSpeechRecognizer(this);
sr.SetRecognitionListener(this);
Button btn = FindViewById<Button>(Resource.Id.btn);
btn.Click += (sender, e) =>
{
Intent intent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
intent.PutExtra(RecognizerIntent.ExtraLanguageModel, RecognizerIntent.LanguageModelFreeForm);
intent.PutExtra(RecognizerIntent.ExtraCallingPackage, "this package");
intent.PutExtra(RecognizerIntent.ExtraMaxResults, 5);
sr.StartListening(intent);
};
tv = FindViewById<TextView>(Resource.Id.tv);
}
public void OnBeginningOfSpeech()
{
tv.Text = "Beginning";
}
public void OnBufferReceived(byte[] buffer)
{
}
public void OnEndOfSpeech()
{
}
public void OnError([GeneratedEnum] SpeechRecognizerError error)
{
tv.Text = error.ToString();
}
public void OnEvent(int eventType, Bundle @params)
{
}
public void OnPartialResults(Bundle partialResults)
{
}
public void OnReadyForSpeech(Bundle @params)
{
tv.Text = "Ready!";
}
public void OnResults(Bundle results)
{
var data = results.GetStringArrayList(SpeechRecognizer.ResultsRecognition);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < data.Count; i++)
{
builder.Append(data[i]);
}
tv.Text = builder.ToString();
}
public void OnRmsChanged(float rmsdB)
{
}
}
This still uses google's speech service, if your device/ region doesn't support this service, you will need to find other speech services and use their API in your app.