Ich habe einen einfachen Spracherkennungsdienst erstellt: Zu diesem Zweck habe ich eine Unterklasse von android.speech.RecognitionService
erstellt und eine Aktivität zum Starten und Stoppen dieses Dienstes erstellt.Wie registriere ich einen benutzerdefinierten Spracherkennungsdienst?
Mein benutzerdefinierter Spracherkennungsdienst verwendet trivialerweise den Standard-Spracherkenner, da mein Ziel einfach darin besteht, zu verstehen, wie die Klassen RecognitionService
und RecognitionService.Callback
funktionieren.
Ich starte und stoppe den Dienst mit der folgenden Aktivität.
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));
}
}
Schließlich erklärte ich meinen Dienst auf den AndroidManifest.xml
(VoiceRecognition Probe im Android SDK-Ordner sehen).
<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>
Dann installierte ich diese Anwendung auf einem Android-Gerät und ich beginne es: - wenn ich den Dienst starten, beginnt es richtig; - Wenn ich aufhöre, stoppt es richtig. Wenn ich den folgenden Code in einer anderen Aktivität starte, enthält die activities
List
nur ein Element, das die Standard-Spracherkennung ist.
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
Warum wird mein Spracherkenner unter den im System vorhandenen nicht zurückgegeben?
Enthält diese uns verwenden aktivieren 'Google Now' außer Kraft setzen Standard RecognitionService? Ich meine, kann ich jetzt meinen eigenen erweiterten Erkennungsservice für Google nutzen? –
Wurde Ihre onStartListening-Funktion beim Starten von SimpleVoiceSearch Service gestartet? @ enzom83 –