Bilmeniz gereken tek şey: İçinde bir düğme bulunan bir iletişim kutusu var. Düğmeye basıldığında, ana tanıma göre konuşma tanıma işlemini başlatmak istiyorum. (İletişim kutusu başka bir sınıf tarafından oluşturulur, tıklamaları bir arabirim aracılığıyla ele alırım).Android konuşma tanıma: startActivityForResult() çalışmıyor
Yani burada alakalı kodu: (MainActivity olarak) İşte
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;
}
}
}
sorundur: Normalde bir iletişim konuşma girişi için görüntülenir. Ama bir şekilde bu diyalog görünmeyecek. Test ettim ve 'test tost'unu (yukarıya bakın) gösterir, ancak hata ve giriş diyaloğu yoktur. Ama neden?
Düzenleme: Sonunda başka bir aygıtta test edebilirim ve (sonunda) Bir hatam var: google iletişim kutusu kapatıldı. Protokolden, boş bir işaretçi istisnası, bu yüzden niyetimle ilgili yanlış bir şey olması gerektiğini düşünüyorum.
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
Android dokümantasyon listeleri RecognizerIntent bu altında "Gerekli Ekstralar": sana inanıyorum
Ayrıntılar için logcat'ı işaretlemeniz gerekiyor, orada hata ayrıntıları görünmelidir. Ne yazık ki, sağladığınız kod yeterli değil. Bu aktiviteyi diğer iş parçacığından başlatmanız olabilir, onu ana iş parçacığından başlatmalısınız. –
Logcat'ta hata yok. Tek bir etkinliğim var (başlangıçta StartActivityForResult (...)). Dediğim gibi, dialogToText() 'i bir diyalogdan ararım. Bir problem olacağını düşündüm, bu yüzden yöntemi çağırmadan önce onu reddetmeye çalıştım, ama bu şu anda evde değil, – kfx9