Как запустить метод SpeechRecognizer.startListening программно - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь использовать Speech Recognizer в моем проекте.Я использую этот учебник в качестве примера.

ссылка Все отлично работает, когда я использую кнопку, чтобы начать прослушивание.

        binding.toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                binding.progressSound.setVisibility(View.VISIBLE);
                binding.progressSound.setIndeterminate(true);
                requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_PERMISSION);

            } else {
                binding.progressSound.setIndeterminate(false);
                binding.progressSound.setVisibility(View.INVISIBLE);
                speech.stopListening();
            }
        }
    });

Метод SpeechRecognizer.startListening переопределяет onRequestPermissionsResult

    @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case REQUEST_RECORD_PERMISSION:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //===start listening
                speech.startListening(recognizerIntent);
            } else {
                Toast.makeText(getContext(), "Permission Denied!", Toast
                        .LENGTH_SHORT).show();
            }
    }
}

Но когда я запускаю распознаватель после воспроизведения звука, он не работает.

        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp)
        {
            Log.i(TAG, "endOfSound");

                    binding.toggleButton.performClick();


        }

Когда я пытался решить эту проблему с помощью задержки, она работает.

        final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            // Do something after 5s = 5000ms
            binding.toggleButton.performClick();
        }
    }, 5000);

Но это плохое решение, потому что длина звуков различна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...