2010-03-07 9 views
4

I, essaie de travailler à travers et tester un exemple de reconnaissance vocale basée sur l'exemple VoiceRecognition.java à http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.htmlConnexion Erreur de reconnaissance vocale

mais quand cliquez sur le bouton pour créer l'activité, je reçois une boîte de dialogue qui dit Problème de connection. Mon fichier manifeste utilise l'autorisation Internet, et je comprends qu'il transmet le aux serveurs Google. Ai-je besoin de faire autre chose pour l'utiliser. Code ci-dessous

MISE À JOUR 2: Grâce à Steve, j'ai pu installer le pilote USB et déboguer l'application directement sur mon Droid. Voici la sortie LogCat de cliquer sur mon bouton micro:

03-08 18:36:45.686: INFO/ActivityManager(1017): Starting activity: Intent { act=android.speech.action.RECOGNIZE_SPEECH cmp=com.google.android.voicesearch/.IntentApiActivity (has extras) } 

03-08 18:36:45.686: WARN/ActivityManager(1017): Activity is launching as a new task, so cancelling activity result. 

03-08 18:36:45.787: DEBUG/NetworkLocationProvider(1017): setMinTime: 120000 

03-08 18:36:45.889: INFO/ActivityManager(1017): Displayed activity com.google.android.voicesearch/.IntentApiActivity: 135 ms (total 135 ms) 

03-08 18:36:45.905: DEBUG/NetworkLocationProvider(1017): onCellLocationChanged [802,0,0,4192,3] 

03-08 18:36:45.951: INFO/MicrophoneInputStream(1429): Starting voice recognition with audio source VOICE_RECOGNITION 

03-08 18:36:45.998: DEBUG/AudioHardwareMot(990): Codec sampling rate already 16000 

03-08 18:36:46.092: INFO/RecognitionService(1429): ssfe url=http://www.google.com/m/voice-search 

03-08 18:36:46.092: WARN/RecognitionService(1429): required parameter 'calling_package' is missing in IntentAPI request 

03-08 18:36:46.115: DEBUG/AudioHardwareMot(990): Codec sampling rate already 16000 

03-08 18:36:46.131: WARN/InputManagerService(1017): Starting input on non-focused client [email protected] (uid=10090 pid=3132) 

03-08 18:36:46.131: WARN/IInputConnectionWrapper(3132): showStatusIcon on inactive InputConnection 

03-08 18:36:46.248: WARN/MediaPlayer(1429): info/warning (1, 44) 
03-08 18:36:46.334: DEBUG/dalvikvm(3206): GC freed 3682 objects/369416 bytes in 293ms 
03-08 18:36:46.358: WARN/MediaPlayer(1429): info/warning (1, 44) 
03-08 18:36:46.412: WARN/MediaPlayer(1429): info/warning (1, 44) 
03-08 18:36:46.444: WARN/MediaPlayer(1429): info/warning (1, 44) 
03-08 18:36:46.475: WARN/MediaPlayer(1429): info/warning (1, 44) 
03-08 18:36:46.506: WARN/MediaPlayer(1429): info/warning (1, 44) 
03-08 18:36:46.514: INFO/MediaPlayer(1429): Info (1,44) 
03-08 18:36:46.514: INFO/MediaPlayer(1429): Info (1,44) 
03-08 18:36:46.514: INFO/MediaPlayer(1429): Info (1,44) 
03-08 18:36:46.514: INFO/MediaPlayer(1429): Info (1,44) 
03-08 18:36:46.514: INFO/MediaPlayer(1429): Info (1,44) 
03-08 18:36:46.514: INFO/MediaPlayer(1429): Info (1,44) 

La ligne qui me préoccupe est la mise en garde du paramètre manquant appelant package. Ok, j'ai été capable de remplacer mon image d'émulateur par celle de HTC qui semble venir avec Google Voice Search, mais maintenant quand je cours depuis l'émulateur, je reçois un message de problème audio avec Speak Again ou Annuler les boutons. Il semble le faire revenir à la onActivityResult(), mais le resultCode est 0.

est ici la sortie LogCat:

03-07 20:21:25.396: INFO/ActivityManager(578): Starting activity: Intent { action=android.speech.action.RECOGNIZE_SPEECH comp={com.google.android.voicesearch/com.google.android.voicesearch.RecognitionActivity} (has extras) } 

03-07 20:21:25.406: WARN/ActivityManager(578): Activity is launching as a new task, so cancelling activity result. 

03-07 20:21:25.968: WARN/ActivityManager(578): Activity pause timeout for HistoryRecord{434f7850 {com.ikonicsoft.mileagegenie/com.ikonicsoft.mileagegenie.MileageGenie}} 

03-07 20:21:26.206: WARN/AudioHardwareInterface(554): getInputBufferSize bad sampling rate: 16000 

03-07 20:21:26.256: ERROR/AudioRecord(819): Recording parameters are not supported: sampleRate 16000, channelCount 1, format 1 

03-07 20:21:26.696: INFO/ActivityManager(578): Displayed activity com.google.android.voicesearch/.RecognitionActivity: 1295 ms 

03-07 20:21:29.890: DEBUG/dalvikvm(806): threadid=3: still suspended after undo (s=1 d=1) 

03-07 20:21:29.896: INFO/dalvikvm(806): Uncaught exception thrown by finalizer (will be discarded): 

03-07 20:21:29.896: INFO/dalvikvm(806): Ljava/lang/IllegalStateException;: Finalizing cursor [email protected] on ml_trackdata that has not been deactivated or closed 

03-07 20:21:29.896: INFO/dalvikvm(806):  at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596) 

03-07 20:21:29.896: INFO/dalvikvm(806):  at dalvik.system.NativeStart.run(Native Method) 

03-07 20:21:31.468: DEBUG/dalvikvm(806): threadid=5: still suspended after undo (s=1 d=1) 

03-07 20:21:32.436: WARN/IInputConnectionWrapper(806): showStatusIcon on inactive InputConnection 

I, m ne sais pas encore pourquoi je, m obtenir le problème Connect sur le droïde. Je peux utiliser la recherche vocale ok. J'ai également essayé de vider le cache, et les données comme décrit dans certains messages, ne devrait pas fonctionner ??

/** 
* Fire an intent to start the speech recognition activity. 
*/ 
private void startVoiceRecognitionActivity() { 
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); 
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 
} 

/** 
* Handle the results from the recognition activity. 
*/ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
    // Fill the list view with the strings the recognizer thought it could have heard 
    ArrayList<String> matches = data.getStringArrayListExtra(
    RecognizerIntent.EXTRA_RESULTS); 
    mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
matches)); 
} 

super.onActivityResult(requestCode, resultCode, data); 
} 
+0

Je recommande de coller le journal ici, ou au moins la partie pertinente de celui-ci. Depuis votre répertoire d'outils Android, exécutez 'adb logcat'. Ne comptez pas sur les messages à l'écran, regardez les exceptions réelles lancées ou les avertissements en sortie. –

+0

Je suis en train de tester cela sur un Motorola Droid. Je suppose que je pensais qu'il n'était pas possible de tester cela dans l'émulateur. – bugzy

+0

Vous pouvez également recevoir des messages de débogage d'un téléphone réel. Sous menu -> paramètres -> applications -> développement, il y a une option pour le débogage USB. Activez-le et lorsque vous branchez le téléphone, LogCat (dans Eclipse) recevra vos messages d'erreur. –

Répondre

4

Ok ... problème résolu.

Il semble que vous ne puissiez pas utiliser android: launchMode = "singleInstance" lors de l'utilisation de RecognizerIntent. J'ai enlevé ceci du manifeste et la recherche vocale fonctionne correctement.

Merci encore Steve, pour les informations sur le débogage USB sur l'appareil. Très utile.

1

Vous pouvez également utiliser android:launchMode="singleTask"

Il fonctionne très bien avec VS.

+0

Y at-il des inconvénients à l'utilisation de singleTask vs singleInstance? –