Распознавание речи на Android 13Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Распознавание речи на Android 13

Сообщение Anonymous »

Я создаю приложение для Android и использую распознавание речи, но, хотя приложение отлично работает с Android 11 и всеми версиями ниже, я столкнулся с препятствием при использовании чего-либо за пределами Android 12. Несмотря на то, что я потратил значительное количество времени При устранении неполадок основная причина этой проблемы мне неизвестна.
Я даже пытался следовать рекомендациям, представленным в соответствующем сообщении о переполнении стека Здесь
К сожалению, даже после выполнения этих рекомендаций результат тот же.

Код: Выделить всё

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

*************************

initSpeechRecognition(this);
speech.setRecognitionListener(this);
recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,                 RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());

}

Код: Выделить всё

public void initSpeechRecognition(Activity activity) {
String recognitionServiceName = getAvailableVoiceRecognitionService(activity);
if (recognitionServiceName == null)
return;

speech = SpeechRecognizer.createSpeechRecognizer(activity,
ComponentName.unflattenFromString(recognitionServiceName));
Log.i("TEST", recognitionServiceName);
}

public static String getAvailableVoiceRecognitionService(Activity activity) {
final List services = activity.getPackageManager().queryIntentServices(
new Intent(RecognitionService.SERVICE_INTERFACE), 0);

String recognitionServiceName = null;

for (final ResolveInfo info : services) {
String packageName = info.serviceInfo.packageName;
String serviceName = info.serviceInfo.name;

String testRecognitionServiceName = packageName + "/" + serviceName;

ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("TEST", name + "::" + service);
}

@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("TEST", name + "::Disconnected");
}
};

Intent serviceIntent = new Intent(RecognitionService.SERVICE_INTERFACE);

ComponentName recognizerServiceComponent = ComponentName.unflattenFromString(testRecognitionServiceName);

if (recognizerServiceComponent != null) {
serviceIntent.setComponent(recognizerServiceComponent);
try {
boolean isServiceAvailableToBind = activity.bindService(serviceIntent, connection, Context.BIND_AUTO_CREATE);
if (isServiceAvailableToBind) {
activity.unbindService(connection);
recognitionServiceName = testRecognitionServiceName;
break;
}
} catch (SecurityException e) {
e.printStackTrace();
}
}
}

return recognitionServiceName;
}
и это остальные методы

Код: Выделить всё

@Override
public void onBeginningOfSpeech() {
Log.i(VOICE_RECOGNITION, "onBeginningOfSpeech");
}

@Override
public void onBufferReceived(byte[] buffer) {
Log.i(VOICE_RECOGNITION, "onBufferReceived: " + Arrays.toString(buffer));
}

@Override
public void onEndOfSpeech() {
Log.i(VOICE_RECOGNITION, "onEndOfSpeech");
}

@Override
public void onError(int errorCode) {
String errorMessage = getErrorText(errorCode);
Log.d(VOICE_RECOGNITION, "FAILED "  + errorMessage);
}

@Override
public void onEvent(int arg0, Bundle arg1) {
Log.i(VOICE_RECOGNITION, "onEvent");
}

@Override
public void onPartialResults(Bundle arg0) {
Log.i(VOICE_RECOGNITION, "onPartialResults");
}

@Override
public void onReadyForSpeech(Bundle arg0) {
Log.i(VOICE_RECOGNITION, "onReadyForSpeech");
}

@Override
public void onResults(Bundle results) {
Log.i(VOICE_RECOGNITION, "onResults");
ArrayList matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
StringBuilder text = new StringBuilder();
assert matches != null;
for (String result : matches) text.append(result).append("\n");
audioToText.add(text.toString());
Log.i(VOICE_RECOGNITION, String.valueOf(audioToText));
}

@Override
public void onRmsChanged(float rmsdB) {
Log.i(VOICE_RECOGNITION, "onRmsChanged: " + rmsdB);
}

public static String getErrorText(int errorCode) {
String message;
switch (errorCode) {
case SpeechRecognizer.ERROR_AUDIO:
message = "Audio recording error";
audioToText.add("audio recording error");
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "Client side error";
audioToText.add("client side error");
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "Insufficient permissions";
audioToText.add("insufficient permissions");
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "Network error";
audioToText.add("network error");
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "Network timeout";
audioToText.add("network timeout");
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "No match";
audioToText.add("no audio detected");
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RecognitionService busy";
audioToText.add("recognition service busy");
break;
case SpeechRecognizer.ERROR_SERVER:
message = "error from server";
audioToText.add("error from server");
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "No speech input";
audioToText.add("no speech input");
break;
default:
message = "Didn't understand, please try again.";
audioToText.add("no audio detected");
break;
}
return message;
}
У меня также есть код для startListening() и stopListening() в соответствующих позициях, и они срабатывают нормально.
вот еще мой часть журнала, которая активируется, когда приложение начинает прослушивать речь

Код: Выделить всё

2023-08-25 12:07:55.696 31209-31209 Voice Recognition     I  onReadyForSpeech
2023-08-25 12:07:55.730 31209-31209 Voice Recognition     I  onRmsChanged: -2.0
2023-08-25 12:07:58.091 31209-31209 Voice Recognition     D  FAILED No match
Я знаю, что приложение работает нормально на моем устройстве с Android 10, но не на другом устройстве с Android 13, и я знаю, что Google внес некоторые изменения в Распознаватель речи в Android 12 и 13, но в Интернете нет места, где бы правильно было показано, как можно реализовать изменения в SpeechService и заставить его работать на Android 13, даже на официальном сайте документации нет ни одного фрагмента кода, показывающего, как реализовать речь распознавание с помощью Android 13.
Может ли кто-нибудь дать представление об этом вопросе или предложить потенциальные решения? Ваша помощь будет безмерно признательна.

Подробнее здесь: https://stackoverflow.com/questions/769 ... android-13
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Распознавание речи не работает для приложения Android, использующего SpeechRecouncer в качестве службы
    Anonymous » » в форуме Android
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous
  • Распознавание речи на Android 13
    Anonymous » » в форуме JAVA
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Распознавание речи Android через микрофон Bluetooth в Jetpack Compose — 2024 г.
    Anonymous » » в форуме Android
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Распознавание речи Android не работает в приложении Expo
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Распознавание речи Android не работает в приложении Expo
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»