Как изящно выключить сервис Android, работающий речи, распознает речи?
-
20-12-2019 - |
Вопрос
Я реализовал версию SilentVoiceReCognionsienservice .
Тем не менее, у меня есть проблема с обслуживанием, не отключенным должным образом, в той мере, в следующий раз приложение запущено, сервис бросает ошибку_recognizer_Busy.
В случае, если это поможет, вот как мой сервис закален в манифесте:
<service
android:name="com.xyz.SilentVoiceRecognitionService"
android:label="@string/app_name">
</service>
.
SilentVoiceReCognityervice начинается с основного сервиса приложения (в OnstartCommand):
public int onStartCommand(Intent intent, int flags, int startId) {
if (mLiveCard == null) {
[...]
startService(new Intent(this, SilentVoiceRecognitionService.class));
}
return START_STICKY;
}
.
Этот сервис начинается один раз.Вот это объявление в файле манифеста:
<service
android:name="com.xyz.XYZService"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
</intent-filter>
<meta-data
android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/voice_trigger_start" />
</service>
.
У кого-нибудь есть идеи, почему этот мернервицеректоринервис не завершен должным образом?
Решение 2
Я до сих пор не уверен, что при запуске приложения уже прослушивается распознатель.Тем не менее, тестирование на его государство в OneRor (), отменив распознатель и перезапустить прослушивание, работал для меня.
Вот код, который я использовал:
@Override
public void onError(int arg0) {
String mError = "";
switch (arg0) {
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
mError = " network timeout";
break;
case SpeechRecognizer.ERROR_NETWORK:
mError = " network" ;
return;
case SpeechRecognizer.ERROR_AUDIO:
mError = " audio";
break;
case SpeechRecognizer.ERROR_SERVER:
mError = " server";
break;
case SpeechRecognizer.ERROR_CLIENT:
mError = " client";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
mError = " speech time out" ;
break;
case SpeechRecognizer.ERROR_NO_MATCH:
mError = " no match" ;
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
mError = " recogniser busy" ;
mSpeechRecognizer.cancel();
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
mError = " insufficient permissions" ;
break;
default:
mError = "Unknown Error";
}
Log.i(TAG, "Error: " + arg0 + " - " + mError);
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
}
. Другие советы
Может быть, попробуйте надевать генеракодицетагкод в свой ondestroy от вашего обслуживания / активности.