Android应用程序在开始使用Watson STT java sdk录制语音时崩溃

Android应用程序在开始使用Watson STT java sdk录制语音时崩溃,android,speech-to-text,ibm-watson,Android,Speech To Text,Ibm Watson,我以前在我的设备上使用过这段代码,但现在它根本不起作用。设备是三星SM-G900P(安卓6.0.2,API23) 我必须自己构建语音到文本、核心和文本到语音库,因为我的应用程序的其他部分需要更新版本的OkHttp库。我是用PR#557建的 下面是我在运行Android Studio时遇到的错误 E/AudioRecord: AudioFlinger could not create record track, status: -1 E/AudioRecord-JNI: Error creatin

我以前在我的设备上使用过这段代码,但现在它根本不起作用。设备是三星SM-G900P(安卓6.0.2,API23)

我必须自己构建语音到文本、核心和文本到语音库,因为我的应用程序的其他部分需要更新版本的OkHttp库。我是用PR#557建的

下面是我在运行Android Studio时遇到的错误

E/AudioRecord: AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.

E/AndroidRuntime: FATAL EXCEPTION: Thread-5952
              java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
                  at android.media.AudioRecord.startRecording(AudioRecord.java:943)
                  at com.ibm.watson.developer_cloud.android.library.audio.MicrophoneCaptureThread.run(MicrophoneCaptureThread.java:63)
一些代码

private void startListening() {

    if (listening != true) {
        capture = new MicrophoneInputStream(true);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    speechService.recognizeUsingWebSocket(capture, getRecognizeOptions(), new MicrophoneRecognizeDelegate());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
        listening = true;
    } else {
        try {
            capture.close();
            listening = false;
            //recordInstance.release();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

private class MicrophoneRecognizeDelegate implements RecognizeCallback {

    @Override
    public void onTranscription(SpeechResults speechResults) {
        System.out.println(speechResults);
        String text = speechResults.getResults().get(0).getAlternatives().get(0).getTranscript();
        showMicText(text);
        if (speechResults.getResults().get(0).isFinal()) {
            try {
                capture.close();
                listening = false;
                send(speechResults.getResults().get(0).getAlternatives().get(0).getTranscript());
            } catch (Exception e) {
                System.out.println("error when closing capture");
                e.printStackTrace();
            }
        }

    }

    @Override public void onConnected() {
        System.out.println("mic connected");
    }

    @Override public void onError(Exception e) {
        e.printStackTrace();
    }

    @Override public void onDisconnected() {
        System.out.println("mic disconnected");
    }
}

谢谢

在我看来,您没有录制音频的适当权限;通常情况下,
AudioFlinger无法创建录制曲目,状态:-1
表示。从API 23开始,您需要在应用程序运行时请求某些权限;录音属于那一套。退房

谢谢。我确实在应用程序中添加了权限,但没有编码提示请求用户权限,因此麦克风权限已关闭。我想我需要为麦克风编写一个提示,但我认为它会自动提示。