распознавание речи не работает из фрагмента - PullRequest
0 голосов
/ 02 мая 2018

У меня есть приложение, которое использует намерение ACTION_RECOGNIZE_SPEECH. Он отлично работает, когда я вызываю startActivityForResult из Activity, и соответствующий onActivityResult находится в той же Activity.

Моя проблема в том, что у меня есть другое приложение, которое использует фрагменты. Если я вызываю startActivityForResult из фрагмента, окно речи не появляется.

Что я пробовал:

Я попытался переопределить onActivityResult в родительском Activity и затем вызвать getActivity.startActivityForResult (намерение, SPEECH_REQUEST_CODE); Это только запускает намерение и выполняет onActivityForResult в классе Activity.

я пробовал различные комбинации из следующего поста.

onActivityResult не вызывается во фрагменте

Это код, который у меня есть на данный момент, и журналы. У кого-нибудь есть предложения?

NB У меня также есть следующие разрешения в манифесте:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET" />

.

Активность родителей:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Log.e(TAG, "inside onActivityForResult in parent. requestCode = " + requestCode + "resultCode = " + requestCode + " data = " + data );
    }

.

Фрагмент класса:

private static final int SPEECH_REQUEST_CODE = 0;

    // Create an intent that can start the Speech Recognizer activity
    private void displaySpeechRecognizer() {
        Log.e(TAG, "inside displaySpeechRecognizer() and speechRequestCode = " + SPEECH_REQUEST_CODE);
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Start the activity, the intent will be populated with the speech text
        startActivityForResult(intent, SPEECH_REQUEST_CODE);
    }

    // This callback is invoked when the Speech Recognizer returns.
// This is where you process the intent and extract the speech text from the intent.
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        Log.e(TAG, "inside onActivityForResult in child fragment. requestCode = " + requestCode + " resultCode = " + resultCode);

        if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) {
            List<String> results = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
            String spokenText = results.get(0);
            // Do something with spokenText
            Log.e(TAG, "spokenText = " + spokenText);
            etCommentEditText.append(" " + spokenText);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

.

Журналы:

    05-02 14:57:37.012 14414-14414/com.carefreegroup.rr3.carefreeoncall E/AlertDetailsFragment: inside displaySpeechRecognizer() and speechRequestCode = 0
05-02 14:57:37.072 14414-14414/com.carefreegroup.rr3.carefreeoncall E/AlertDetailsFragment: inside onActivityForResult in child fragment. requestCode = 0 resultCode = 0

1 Ответ

0 голосов
/ 04 мая 2018

вы должны позвонить recognizer.startListening(speechIntent); и для остановки recognizer.stopListening();

Теперь работает фрагментарно.

Предположим, вы хотите инициализировать распознаватель речи при нажатии кнопки вызова выше методов.

...