Comment enregistrer une coutume service de reconnaissance vocale?
J'ai créé un simple service de reconnaissance vocale: pour cela, j'ai créé une sous-classe de android.speech.RecognitionService
et j'ai créé une activité de démarrer et d'arrêter ce service.
À mon habitude le service de reconnaissance vocale trivialement utilise la valeur par défaut de reconnaissance vocale, parce que mon but est simplement de comprendre comment la RecognitionService
et RecognitionService.Callback
classes.
public class SimpleVoiceService extends RecognitionService {
private SpeechRecognizer m_EngineSR;
@Override
public void onCreate() {
super.onCreate();
Log.i("SimpleVoiceService", "Service started");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("SimpleVoiceService", "Service stopped");
}
@Override
protected void onCancel(Callback listener) {
m_EngineSR.cancel();
}
@Override
protected void onStartListening(Intent recognizerIntent, Callback listener) {
m_EngineSR.setRecognitionListener(new VoiceResultsListener(listener));
m_EngineSR.startListening(recognizerIntent);
}
@Override
protected void onStopListening(Callback listener) {
m_EngineSR.stopListening();
}
/**
*
*/
private class VoiceResultsListener implements RecognitionListener {
private Callback m_UserSpecifiedListener;
/**
*
* @param userSpecifiedListener
*/
public VoiceResultsListener(Callback userSpecifiedListener) {
m_UserSpecifiedListener = userSpecifiedListener;
}
@Override
public void onBeginningOfSpeech() {
try {
m_UserSpecifiedListener.beginningOfSpeech();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onBufferReceived(byte[] buffer) {
try {
m_UserSpecifiedListener.bufferReceived(buffer);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onEndOfSpeech() {
try {
m_UserSpecifiedListener.endOfSpeech();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onError(int error) {
try {
m_UserSpecifiedListener.error(error);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onEvent(int eventType, Bundle params) { ; }
@Override
public void onPartialResults(Bundle partialResults) {
try {
m_UserSpecifiedListener.partialResults(partialResults);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onReadyForSpeech(Bundle params) {
try {
m_UserSpecifiedListener.readyForSpeech(params);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onResults(Bundle results) {
try {
m_UserSpecifiedListener.results(results);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onRmsChanged(float rmsdB) {
try {
m_UserSpecifiedListener.rmsChanged(rmsdB);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
Je démarrer et arrêter le service de l'aide à l'activité suivante.
public class VoiceServiceStarterActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button startButton = new Button(this);
startButton.setText("Start the service");
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { startVoiceService(); }
});
Button stopButton = new Button(this);
stopButton.setText("Stop the service");
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { stopVoiceService(); }
});
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(startButton);
layout.addView(stopButton);
setContentView(layout);
}
private void startVoiceService() {
startService(new Intent(this, SimpleVoiceService.class));
}
private void stopVoiceService() {
stopService(new Intent(this, SimpleVoiceService.class));
}
}
Enfin, j'ai déclaré mon service sur le AndroidManifest.xml
(voir VoiceRecognition de l'échantillon à l'intérieur d'Android SDK dossier).
<service android:name="SimpleVoiceService"
android:label="@string/service_name" >
<intent-filter>
<action android:name="android.speech.RecognitionService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
Puis j'ai installé cette application sur un appareil Android et je commence:
- lorsque je démarre le service, il démarre correctement;
- quand j'arrête, il s'arrête correctement.
Mais si je lance le code suivant dans une autre activité, le activities
List
ne contient qu'un élément, qui est la valeur par défaut de reconnaissance vocale.
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
Pourquoi ma reconnaissance vocale pas retourné parmi les personnes présentes dans le système?
Ont été votre onStartListening Commencé à travailler lorsque vous démarrez SimpleVoiceSearch Service ? @enzom83
OriginalL'auteur enzom83 | 2012-04-03
Vous devez vous connecter pour publier un commentaire.
Si vous voulez
queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0)
pour ramasser votre activité (VoiceServiceStarterActivity
), alors vous devez déclarer dans votre Manifeste de l'application de cette activité poignéesRecognizerIntent.ACTION_RECOGNIZE_SPEECH
, à l'instar de cePour plus concrète code avoir un regard sur le projet Kõnele ( le code source ), qui est essentiellement une implémentation open source des interfaces par lesquelles la reconnaissance vocale est fourni sur Android, c'est à dire qu'il couvre:
et utilise open source de reconnaissance de la parole serveurs.
VoiceDemoActivity
) qui gère le défaut de reconnaissance vocale par le biais d'unSpeechRecognizer
objet. Afin d'utiliser un service de reconnaissance vocale, je dois créer un nouveauSpeechRecognizer
objet de spécification d'unComponentName
objet dans lecreateSpeechRecognizer
méthode: je suppose que ceComponentName
doivent se référer à la coutume de reconnaissance vocale de service, j'ai donc créé un nouveauRecognitionService
classe. Pourquoi ai-je besoin pour mettre en œuvre une autre activité qui peut gérer lesACTION_RECOGNIZE_SPEECH
intention?J'ai amélioré ma réponse un peu, peut-être qu'il a fait un peu plus clair.
J'aime vraiment ce que vous avez fait dans Kõnele (bien que je ne connais pas la langue estonienne). J'ai téléchargé le code source de github pour apprendre, par exemple, comment mettre en place mes propres (en anglais seulement), mais il ne serait pas construire hors de la boîte et l'a publié l'application elle-même (à télécharger sur Google Play) est coincé dans "la Transcription...". Où puis-je en apprendre davantage sur la structure de votre code (3 paquets) et pourquoi elle est mise en œuvre? Merci!
Merci! Kõnele est en fait indépendante de la langue, mais il est vrai que l'accent est mis actuellement sur l'estonien. Le serveur par défaut qui Kõnele utilise prend également en charge l'anglais, mais seulement dans le cas de la grammaire à base de reconnaissance de la parole (kaljurand.github.io/Grammaires). Veuillez rapporter tous les bugs que vous trouvez (et aussi le manque de documentation) à l'adresse code.google.com/p/recognizer-intent/issues/list je peux y répondre dans le cadre du rapport de bug.
OriginalL'auteur Kaarel
Oui, vous avez besoin d'utiliser createSpeechRecognizer(contexte Contexte, Nomcomposant serviceComponent)
OriginalL'auteur Dalvinder Singh