2017-07-17 4 views
2

Ich möchte das Popup von Google Speech deaktivieren. Ich möchte, dass es im Hintergrund läuft, also sollte kein Popup auftauchen. Ich programmiere in Visual Studio mit C# und ich möchte eine Spracherkennung App auf/in Android machen.Popup von Google Speech deaktivieren

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); 
} 

Kann mir jemand helfen das Popup zu deaktivieren?

+0

Es tut mir leid, es ist meine Schuld. Ich meine, dass das Popup nicht auftauchen sollte. Wenn ich auf den Knopf drücke, sollte es anfangen zu hören (ohne Popup). – Ossi

Antwort

1

Sie können die SpeechRecognizer für Ihre App implementieren. Die Implementierung dieser API wird wahrscheinlich Audio auf entfernte Server streamen, um eine Spracherkennung durchzuführen.

Ihre App muss die Berechtigung RECORD_AUDIO haben.

Zum Beispiel:

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) 
    { 
    } 
} 

Dieser noch verwendet Googles Sprachdienst, wenn Ihr Gerät/Region diesen Dienst nicht unterstützt, müssen Sie andere Sprachdienste zu finden und ihre API in Ihrer Anwendung verwenden.

Verwandte Themen