Перейти к содержанию
Fire Monkey от А до Я
  • 0

Вызов распознавателя голоса. Помогите перевести Java код на Delphi


abwabw

Вопрос

Хочу попробовать прикрутить к проекту для дроида googl-овское распознавание голоса. Нашёл пример реализации этой функции вот тут или тут.
Помогите перевести на XE5 FM, вот этот кусок:

package com.genisoft.inforino;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.speech.RecognizerIntent;

public class SpeechRecognitionHelper {
    public static void run(Activity ownerActivity) {
            startRecognitionActivity(ownerActivity);
        }            
    }
 
    private static void startRecognitionActivity(Activity ownerActivity) {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Голосовой поиск Inforino");
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);    
        intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ru-RU");
        ownerActivity.startActivityForResult(intent, SystemData.VOICE_RECOGNITION_REQUEST_CODE);
    }
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Отвечаю сам себе.

Реализовать на XE5 FM mobile (и по моему и на XE6) распознавание голоса пока невозможно в связи с тем, что ембаркодеровцы в delphi не реализовали дроидовской модуль API: android.speech.

Хотя странно это, этот модуль в дроиде существует с 8 левела, а щаз актуальый уже 19-ый.

Ссылка на комментарий
  • 0
  • Администраторы

Почему Не все Android API включено в RTL

  1. Это АПИ, как и другое, специально не включено в состав RTL. Поскольку в RTL включены только те классы и пакеты, которые непосредственно используются и нужны для корректного функционирования FireMonkey.
  2. Вторая не менее важная причина - это прирост размера выходного файла вашего приложения. Проблемы трансляции всех модулей Android API нету. Главная причина в том, что мост вызовов между Delphi и Android программный, и поэтому включение огромного числа дополнительных интерфейсов Android API  влечет значительный прирост конечного исполняемого файла. Так как он будет содержать всю ту часть модулей, которые не используются.

Решение

1. Переводим нужную часть Android API. Делаем по аналогии, как переведены другие классы и пакеты, сравнивая документацию Андроида и аналогичные обертки на Delphi AndroidApi.JNU.*  Androidapi.JNI.Speech.pas.zip

2. Пишем реализацию на Delphi:

uses
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Speech, Androidapi.Helpers, FMX.Helpers.Android;

procedure OpenSpeechRecognizer;
var
  Intent: JIntent;
begin
  Intent := TJIntent.JavaClass.init(TJRecognizerIntent.JavaClass.ACTION_RECOGNIZE_SPEECH);
  Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_PROMPT, StringToJString('Голосовой поиск Inforino'));
  Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_LANGUAGE_MODEL, TJRecognizerIntent.JavaClass.LANGUAGE_MODEL_WEB_SEARCH);
  Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_MAX_RESULTS, 1);
  Intent.putExtra(TJRecognizerIntent.JavaClass.EXTRA_LANGUAGE, StringToJString('ru-RU'));
  SharedActivity.startActivityForResult(Intent, 1);
end;
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...