Android Reconnaissance vocale App Sans Pop Up

Je suis actuellement à la recherche dans une carrière avec JAVA et ont décidé de commencer par la création d'une application.
J'ai ce code que j'utilise pour déclencher de Reconnaissance de la Parole.

public class MainActivity extends Activity implements OnClickListener{
private static final int VR_REQUEST = 999;
private ListView wordList;
private final String LOG_TAG = "SpeechRepeatActivity";  
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button speechBtn = (Button) findViewById(R.id.speech_btn);
wordList = (ListView) findViewById (R.id.word_list);
PackageManager packManager= getPackageManager();
List<ResolveInfo> intActivities = packManager.queryIntentActivities
(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (intActivities.size() !=0){
speechBtn.setOnClickListener(this);
} else {
speechBtn.setEnabled(false);
Toast.makeText(this,"Oops - Speech Recognition Not Supported!", 
Toast.LENGTH_LONG).show();
}       
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick(View v){
if (v.getId() == R.id.speech_btn) {
listenToSpeech();
}
}
private void listenToSpeech() {
//start the speech recognition intent passing required data
Intent listenIntent = 
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//indicate package
listenIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
getClass().getPackage().getName());
//message to display while listening
listenIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say a word!");
//set speech model
listenIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//specify number of results to retrieve
listenIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);
//start listening
startActivityForResult(listenIntent, VR_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, 
int resultCode, Intent data) {
//check speech recognition result 
if (requestCode == VR_REQUEST && resultCode == RESULT_OK) {
//store the returned word list as an ArrayList
ArrayList<String> suggestedWords = data.
getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
//set the retrieved list to display in the ListView 
//using an ArrayAdapter
wordList.setAdapter(new ArrayAdapter<String> 
(this, R.layout.word, suggestedWords));
}
//this detects which one the user clicks 
wordList.setOnItemClickListener(new OnItemClickListener(){
//click listener for items within list
public void onItemClick(AdapterView<?> parent, 
View view, int position, long id){
//cast the 
TextView wordView = (TextView)
//retrive the chosen word
String wordChosen= (String) wordView.
//output for debugging
Log.v(LOG_TAG, "chosen:" +wordChosen);
}});
super.onActivityResult(requestCode, resultCode, data);
}
}

Dans cette application, l'utilisateur appuie sur un bouton et s'affiche avec Google Voice écran de Saisie où vous pouvez cliquer sur un bouton (en fait, il va automatiquement), vous pouvez parler, il s'arrête, et il va l'afficher. Je ne veux pas que la fenêtre de pop-up à tous même si. Au lieu juste de permettre à l'utilisateur de cliquer sur le bouton et être capable de parler et de laisser l'application s'arrêter et afficher le texte automatiquement (il le fait déjà que).

S'il vous PLAÎT! Je comprends qu'il y a déjà des réponses sur le formulaire montrant comment le faire, en fait un nom d'utilisateur JEEZ posté un peu de code ici.

Je ne sais pas si j'ai bien compris où mettre ceci dans mon fichier de projet. JE SUIS UN NOOB! Si quelqu'un pouvait aider à clarifier ce je vous serais très reconnaissant de votre aide.

Voici mon code:

package com.example.speechrecognizertest;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.TextView;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
private static final int VR_REQUEST = 999;
public static final String TAG = null;
private ListView wordList;
private final String LOG_TAG = "SpeechRepeatActivity";
private SpeechRecognizer mSpeechRecognizer;
private Intent mSpeechRecognizerIntent; 
private boolean mIslistening; 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button speechBtn = (Button) findViewById(R.id.speech_btn);
wordList = (ListView) findViewById(R.id.word_list);
PackageManager packManager = getPackageManager();
List<ResolveInfo> intActivities = packManager.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
this.getPackageName());
if (!mIslistening)
{
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
} else {
speechBtn.setEnabled(false);
Toast.makeText(this, "Oops - Speech Recognition Not Supported!",
Toast.LENGTH_LONG).show();
}
}
@Override
protected void onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
protected class SpeechRecognitionListener implements RecognitionListener
{
@Override
public void onBeginningOfSpeech()
{               
//Log.d(TAG, "onBeginingOfSpeech"); 
}
@Override
public void onBufferReceived(byte[] buffer)
{
}
@Override
public void onEndOfSpeech()
{
//Log.d(TAG, "onEndOfSpeech");
}
@Override
public void onError(int error)
{
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
//Log.d(TAG, "error = " + error);
}
@Override
public void onEvent(int eventType, Bundle params)
{
}
@Override
public void onPartialResults(Bundle partialResults)
{
}
@Override
public void onReadyForSpeech(Bundle params)
{
Log.d(TAG, "OnReadyForSpeech"); //$NON-NLS-1$
}
@Override
public void onResults(Bundle results)
{
//Log.d(TAG, "onResults"); //$NON-NLS-1$
ArrayList<String> suggestedWords =      results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
//matches are the return values of speech recognition engine
//Use these values for whatever you wish to do
wordList.setAdapter(new ArrayAdapter<String>(this, R.layout.word, suggestedWords));
}
@Override
public void onRmsChanged(float rmsdB)
{
}
}
  • Jetez un oeil à stackoverflow.com/questions/16219601/...
  • Grâce Hoan, juste un problème. J'ai vu le code que vous avez référencé à partir de ce tutoriel, mais je ne sais pas comment l'intégrer dans mon projet. Pouvez-vous aider?
  • Vous utilisez l'activité de la droite?
  • Je ne suis pas sûr de ce que vous voulez dire par là. J'ai mis tout mon code dans le document principal. L'activité (je pense que cela signifie la mise en page) dispose d'un bouton et d'une vue de liste. Autres que que tout ce qui est affiché sur la question. (Je souhaite vraiment que je pourrais répondre à votre question). Juste un edit - je n'utilise pas l'activité, je ne crois pas, car il n'est jamais appelée. Tout en s'inscrivant dans le code de l'activité principale. Comment puis-je utiliser de l'activité? Pourquoi voudrais-je l'utiliser et que faut-il faire pour moi? Merci beaucoup pour vos réponses rapides!
  • Salut Hoan! Je veux faire des commentaires dans votre post, mais pour une raison que je ne pense pas que j'ai le droit de trop... :(. Ce que vous m'avez donné est extrêmement utile. Je pense que le principal problème que j'ai rencontré était que je ne savais pas à quoi les remplacer par ce. J'ai compris les trois premières étapes, mais ne pas comprendre ce que le onDestroy a été et si ou pas si je devrais remplacer la classe avec quelque chose. Très complète réponse et merci beaucoup! Aussi, je sais que vous êtes clairement un pro et j'aimerais essayer de rattraper votre niveau. Si vous pourriez suggérer quelque chose pour m'aider à apprendre qui aiderait beaucoup!
  • Chaque activité a un appel de la méthode onDestroy de laquelle le système appelée lorsque l'activité est détruite. Dans Eclipse menu, vous pouvez sélectionner la Source --> Remplacer/mettre en Œuvre des Méthodes... et choisir onDestroy. Si vous avez une application d'une idée juste de commencer à écrire, et que c'est la meilleure façon d'apprendre.
  • Ok et juste vite fait... Rien n'a à être remplacé dans mon application avec ce que vous avez écrit-il correct?
  • Retirez votre listenToSpeech et onActivityResult méthodes. Déplacez votre liste de mots.setAdapter à la onResult de la SpeechRecognitionListener classe.
  • Vous n'avez pas de copie de mon code ci-dessous pour votre MainActivity?
  • Salut à tous, j'ai couru dans certaines erreurs de La méthode onRmsChanged(float) de type MainActivity doit remplacer ou de mettre en œuvre un supertype méthode Du type MainActivity doit mettre en œuvre les hérité de la méthode abstraite Vue.OnClickListener.onClick(View) La méthode onActivityResult(int, int, Intention) n'est pas défini pour le type d'Objet Le constructeur ArrayAdapter<String>(MainActivity.SpeechRecognitionListener, int, ArrayList<String>) n'est pas défini
  • void est un type non valide pour la variable onActivityResult Le type MainActivity.SpeechRecognitionListener doit mettre en œuvre les hérité de la méthode abstraite RecognitionListener.onRmsChanged(float)
  • pourquoi ne pas vous poster votre code.
  • Code Postal Où? Comment? Je n'ai pas assez de caractères pour le mettre dans les commentaires
  • Éditer ton post et de le mettre dans le nouveau code.
  • Se sentir libre de modifier mon code que j'ai posté pour le bon code que je devrais avoir, d'expliquer brièvement ce que vous avez fait et je pense que ce serait parfait! Ou vous pouvez ajouter à votre réponse post.
  • J'ai édité votre deuxième classe MainActivity.
  • Tout semble bon, mais en utilisant le code que vous avez fourni j'ai eu quelques erreurs que je n'étais pas sûre de savoir quoi faire avec. La première erreur m'a dit que suggestWords ne peut pas être résolu à une variable... attendre quoi? L'autre erreur me dit de changer le type MainAcitivity pour mettre en œuvre les hérité résumé methode Vue.OnLickListener.onClick(view) je ne comprends pas vraiment ces, peut-être que vous pouvez me tirer une astuce.
  • J'ai édité votre MainActivity. Vous avez besoin d'apprendre Java un peu plus.
  • Salut Hoan, tout semble être un peu de travail, je comprends tout maintenant, mais pensez-vous que j'ai peut-être besoin d'avoir de définir un certain autorisation pour l'application dans le manifeste? Le bouton est appelé, mais la réelle reconnaissance de la parole n'est pas en cours de démarrage ( n'ont pas de moyen de tester si la classe est appelé) mais je ne pense pas qu'il est.
  • Ne vous lancez sur un téléphone ou un émulateur? L'émulateur peut ne pas avoir de Reconnaissance de la Parole, mais je ne suis pas sûr.
  • L'émulateur ne l'ont pas, je le sais, mais je suis en cours d'exécution sur un galaxy s3. Je sais que le bouton est cliquable et de l'envoi de journaux, mais je ne sais pas si mSpeechRecognizer est appelé. Vous en pensez quoi? Aussi, comment puis-je mettre un journal.d à l'intérieur de la classe mSpeechRecognizerIntent pour voir si elle est appelée? Je suis également recevoir des erreurs de ce type (erreur d'ouverture de fichier de trace: Aucun fichier ou répertoire?) et (s3dReadConfigFile:75), mais l'application fonctionne sur mon téléphone android et envoie les journaux alors peut-être ou peut-être ou pas qui a quelque chose à faire avec elle.
  • Poser une nouvelle question avec code complet. Je vais jeter un oeil
  • J'ai posté la question!

InformationsquelleAutor Liam Shalon | 2013-04-26