2016-05-29 4 views
1

Hallo Android-Entwickler,ANDROID.Wie macht man eine Spracheingabe für Text ohne Google Popup erscheint?

Ich bin Anfänger in Android-Entwicklung. Mit diesem Problem stecken geblieben -

Ich möchte Stimme zur Texteingabe machen, aber ich möchte nicht, dass Google Popup erscheint. Ich habe mehrere Apps gesehen, die Spracheingaben enthalten, also bitte, vielleicht kann mir jemand helfen, es herauszufinden?

Hier der Screenshot von Popup enter image description here

Hier ist mein Code von MainActivity

public class MainActivity AppCompatActivity erstreckt {

private TextView resultTV; 

/** 
* ATTENTION: This was auto-generated to implement the App Indexing API. 
* See https://g.co/AppIndexing/AndroidStudio for more information. 
*/ 
private GoogleApiClient client; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    resultTV = (TextView) findViewById(R.id.resultTV); 
} 


public void onButtonClick(View view) { 

    if (view.getId() == R.id.imageButton) { 

     promtSpeechInput(); 

    } 


} 

public void promtSpeechInput() { 

    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
     i.putExtra(RecognizerIntent.EXTRA_PROMPT, "SAY SOMETHING"); 
     i.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 



    try { 

     startActivityForResult(i, 100); 
     Toast.makeText(MainActivity.this, "Say something kiddo", Toast.LENGTH_LONG).show(); 



    } catch (Exception e) { 
     Toast.makeText(MainActivity.this, "Sorry, your device not support speech inputs", Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } 


} 


public void onActivityResult(int request_code, int result_code, Intent i){ 


     super.onActivityResult(request_code,result_code,i); 

     switch (request_code) 
     { 

      case 100: if(result_code == RESULT_OK && i != null){ 
       ArrayList<String> result = i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 

       resultTV.setText(result.get(0)); 

      } 
      break; 

     } 

Antwort

1

Versuchen Sie, diese mit Aktivität, die ich erstellt habe, wenn Sie aber wechseln Tonne auf die Aufnahme beginnt, und die Schwankungen in der Tonhöhe der Stimme umgeschaltet wird, wird in einem ProgressBar- mit der RmsChanged() Methode, der Text erkannt wird, in einer Textview

public class MainActivity extends Activity implements RecognitionListener 
{ 
private TextView returnedText; 
private ToggleButton toggleButton; 
private ProgressBar progressBar; 
private SpeechRecognizer speech = null; 
private Intent recognizerIntent; 
private String LOG_TAG = "VoiceRecognitionActivity"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    returnedText = (TextView) findViewById(R.id.textView1); 
    progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
    toggleButton = (ToggleButton) findViewById(R.id.toggleButton1); 
    Button recordbtn = (Button) findViewById(R.id.mainButton); 


    progressBar.setVisibility(View.INVISIBLE); 
    speech = SpeechRecognizer.createSpeechRecognizer(this); 
    speech.setRecognitionListener(this); 
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, 
           "en"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
           this.getPackageName()); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
           RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 3000); 

    toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, 
             boolean isChecked) { 
       if (isChecked) { 
        progressBar.setVisibility(View.VISIBLE); 
        progressBar.setIndeterminate(true); 
        speech.startListening(recognizerIntent); 
       } else { 
        progressBar.setIndeterminate(false); 
        progressBar.setVisibility(View.INVISIBLE); 
        speech.stopListening(); 
       } 
      } 
     }); 






} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (speech != null) { 
     speech.destroy(); 
     Log.i(LOG_TAG, "destroy"); 
    } 

} 

@Override 
public void onBeginningOfSpeech() { 
    Log.i(LOG_TAG, "onBeginningOfSpeech"); 
    progressBar.setIndeterminate(false); 
    progressBar.setMax(10); 
} 

@Override 
public void onBufferReceived(byte[] buffer) { 
    Log.i(LOG_TAG, "onBufferReceived: " + buffer); 
} 

@Override 
public void onEndOfSpeech() { 
    Log.i(LOG_TAG, "onEndOfSpeech"); 
    progressBar.setIndeterminate(true); 
    toggleButton.setChecked(false); 
} 

@Override 
public void onError(int errorCode) { 
    String errorMessage = getErrorText(errorCode); 
    Log.d(LOG_TAG, "FAILED " + errorMessage); 
    returnedText.setText(errorMessage); 
    toggleButton.setChecked(false); 
} 

@Override 
public void onEvent(int arg0, Bundle arg1) { 
    Log.i(LOG_TAG, "onEvent"); 
} 

@Override 
public void onPartialResults(Bundle arg0) { 
    Log.i(LOG_TAG, "onPartialResults"); 
ArrayList<String> matches = arg0 
     .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
    String text = ""; 
    for (String result : matches) 
     text += result + "\n"; 

    returnedText.setText(text); 


} 

@Override 
public void onReadyForSpeech(Bundle arg0) { 
    Log.i(LOG_TAG, "onReadyForSpeech"); 
} 

@Override 
public void onResults(Bundle results) { 
    Log.i(LOG_TAG, "onResults"); 

} 

@Override 
public void onRmsChanged(float rmsdB) { 
    Log.i(LOG_TAG, "onRmsChanged: " + rmsdB); 
    progressBar.setProgress((int) rmsdB); 

} 

public static String getErrorText(int errorCode) { 
    String message; 
    switch (errorCode) { 
     case SpeechRecognizer.ERROR_AUDIO: 
      message = "Audio recording error"; 
      break; 
     case SpeechRecognizer.ERROR_CLIENT: 
      message = "Client side error"; 
      break; 
     case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: 
      message = "Insufficient permissions"; 
      break; 
     case SpeechRecognizer.ERROR_NETWORK: 
      message = "Network error"; 
      break; 
     case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: 
      message = "Network timeout"; 
      break; 
     case SpeechRecognizer.ERROR_NO_MATCH: 
      message = "No match"; 
      break; 
     case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
      message = "RecognitionService busy"; 
      break; 
     case SpeechRecognizer.ERROR_SERVER: 
      message = "error from server"; 
      break; 
     case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: 
      message = "No speech input"; 
      break; 
     default: 
      message = "Didn't understand, please try again."; 
      break; 
    } 
    return message; 
} 




    } 

NICHT VERGESSEN Addiert man diese Erlaubnis in IHRE gezeigten MANIFEST

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
+0

Vielen Dank im Voraus. Es funktioniert immer noch nicht, können Sie bitte teilen Sie Android Manifest Berechtigungen? :) –

+0

@ VaclovasRekašiusJr. Bro ich habe gerade die erforderliche Erlaubnis in der Antwort jetzt redigiert und hinzugefügt, Sie können es heraus überprüfen – user5894647

+0

@ VaclovasRekašiusJr. Und lassen Sie mich wissen, wenn es funktioniert – user5894647

1

Versuchen Sie diesen Code

SpeechRecognizer recognize=SpeechRecognizer.createSpeechRecognizer(this); 
    recognize.setRecognitionListener(new RecognitionListener() { 
     @Override 
     public void onReadyForSpeech(Bundle bundle) { 

     } 

     @Override 
     public void onBeginningOfSpeech() { 

     } 

     @Override 
     public void onRmsChanged(float v) { 

     } 

     @Override 
     public void onBufferReceived(byte[] bytes) { 

     } 

     @Override 
     public void onEndOfSpeech() { 

     } 

     @Override 
     public void onError(int i) { 
      Toast.makeText(getApplicationContext(),"ERROR",Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onResults(Bundle bundle) { 
      String output = bundle.getString(SpeechRecognizer.RESULTS_RECOGNITION); 
      Toast.makeText(getApplicationContext(),output,Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onPartialResults(Bundle bundle) { 

     } 

     @Override 
     public void onEvent(int i, Bundle bundle) { 

     } 
    }); 
recognize.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)); 
+0

Können Sie mir bitte sagen, wo soll ich diesen Code ablegen? –

+1

Schreiben Sie es in promtSpeechInput() Methode –