मैंने एक साधारण भाषण मान्यता सेवा बनाई: इस उद्देश्य के लिए मैंने android.speech.RecognitionService
का उप-वर्ग बनाया और मैंने इस सेवा को शुरू करने और रोकने के लिए एक गतिविधि बनाई।कस्टम भाषण मान्यता सेवा कैसे पंजीकृत करें?
मेरी कस्टम भाषण मान्यता सेवा डिफ़ॉल्ट भाषण पहचानकर्ता का उपयोग करती है, क्योंकि मेरा लक्ष्य यह समझने के लिए है कि RecognitionService
और RecognitionService.Callback
कक्षाएं कैसे काम करती हैं।
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();
}
}
}
}
मैं निम्न गतिविधि का उपयोग कर सेवा शुरू और बंद करता हूं।
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));
}
}
अंत में मैं AndroidManifest.xml
पर मेरी सेवा (एंड्रॉयड एसडीके फ़ोल्डर के भीतर VoiceRecognition नमूना देखें) घोषित कर दिया।
<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>
तो मैं एक Android डिवाइस पर इस अनुप्रयोग स्थापित है और मैं इसे शुरू: - जब मैं सेवा शुरू करते हैं, यह ठीक से शुरू होता है; - जब मैं इसे रोकता हूं, तो यह ठीक से बंद हो जाता है।
लेकिन यदि मैं किसी अन्य गतिविधि में निम्न कोड लॉन्च करता हूं, तो में केवल एक तत्व होता है, जो डिफ़ॉल्ट भाषण पहचानकर्ता है।
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
मेरा भाषण पहचानकर्ता सिस्टम में मौजूद लोगों के बीच क्यों नहीं लौटाया गया है?
उपयोग करने की आवश्यकता? मेरा मतलब है, क्या मैं अब Google के लिए अपनी विस्तारित मान्यता सेवा को हुक कर सकता हूं? –
जब आप SimpleVoiceSearch सेवा शुरू करते हैं तो आपके ऑनस्टार्ट लिस्टिंग काम शुरू कर रहे थे? @ enzom83 –