2015-08-13 21 views
5

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

+0

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. –

+0

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

cevap

1

Yani nihayet sorunu çözmek olabilir ... en azından benim testte, onsuz çalışır aktivitenin başlatma modu. Amacım için singleTask'ı alternatif olarak kullandım.

0

de bu gereklidir.

DÜZENLEME: Denemeden sonra EXTRA_LANGUAGE_MODEL, belgenin aksine Niyetinde zorunlu DEĞİLDİR. Benim manifast olarak

: Her nasılsa

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden|screenSize" 
     android:theme="@style/AppTheme" 
     android:uiOptions="none" > 
     android:launchMode="singleInstance"> <!--THIS WON'T WORK--> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

siz SingleInstance kullanamazsınız Tanıma

+0

Sry'ye yardım etmiyor, ama en kısa zamanda kontrol ediyorum :). İlk önce bu cevabı görmezden geldim, çünkü tam olarak bu yöntemleri kullandığı başka bir uygulamada (iletişim kutusundan değil) kullandım. – kfx9

+0

Hayır, çalışmıyor ... – kfx9

+0

Hmmm. Eh, kodunuzu aldım, varsayılan bir uygulama iskeletinde paketlendim, birkaç beyan edilmemiş sınıf değişkenini çözdüm ve benim için iyi çalışıyor. Tanınırım. Evet, "EXTRA_LANGUAGE_MODEL" olmadan bile. – spechter

İlgili konular