Tout ce que vous devez savoir: J'ai un dialogue avec un bouton dedans. Lorsque le bouton est pressé, je veux démarrer la reconnaissance vocale dans ma MainActivity. (Le dialogue est créé par une autre classe, je gère les clics via une interface).Reconnaissance vocale Android: startActivityForResult() ne fonctionne pas
Voici donc le code correspondant: (en MainActivity)
public void speechToText(boolean isName) {
this.isName = isName;
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());
//intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.prompt));
try {
startActivityForResult(intent, RESULT_SPEECH);
Toast.makeText(getApplicationContext(),
"started acitvity for result", //test toast
Toast.LENGTH_SHORT).show();
} catch (ActivityNotFoundException a) {
Toast.makeText(getApplicationContext(),
getString(R.string.speech_to_text_not_supported),
Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_SPEECH: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> text = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if(isName)
currentName = text.get(0);
else
currentDes = text.get(0);
dialog.DialogNew(currentName, currentDes);
}
break;
}
}
}
Voici le problème: Normalement, une boîte de dialogue apparaît pour l'entrée de la parole. Mais en quelque sorte cette boîte de dialogue n'apparaîtra pas. Je l'ai testé, et il montre le 'test toast' (voir ci-dessus), mais il n'y a pas d'erreur et pas de dialogue de saisie. Mais pourquoi?
Editer: J'ai finalement pu le tester sur un autre appareil et (enfin) j'ai eu une erreur: la boîte de dialogue google était fermée. Du protocole, une exception de pointeur nul, donc je suppose qu'il doit y avoir quelque chose de mal avec mon intention.
Vous devez vérifier logcat pour plus de détails, les détails d'erreur devraient apparaître là. Malheureusement, le code que vous avez fourni n'est pas suffisant. Il se peut que vous commenciez cette activité à partir d'un autre thread, vous devriez le démarrer à partir d'un thread principal. –
Aucune erreur dans logcat. J'ai seulement une activité (dans laquelle j'appelle le startActivityForResult (...)). Comme je l'ai dit, j'appelle speechToText() à partir d'une boîte de dialogue. Je pensais qu'il y aurait un problème, donc j'ai essayé de le rejeter avant que j'appelle la méthode, mais cela n'aide pas – kfx9