程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本?

开发过程中遇到获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本的问题如何解决?下面主要结合日常开发的经验,给出你关于获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本的解决方法建议,希望对你解决获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本有所启发或帮助;

我想通过声音媒体发送和接收字符串消息,在那里我打印出接收消息的日志。我的代码似乎与 androID 10 版本完美兼容,但在 androID pIE 上遇到了这个问题。

实际上,我面临的问题是,收到的消息在第一次之后没有打印出来。我只在第一次收到消息,但在第二次之后没有收到消息,而且我只在低于 androID 10 的版本上收到此错误消息。我能知道这条错误消息背后的实际问题吗。

经过一些研究,我知道AudioRecord应该在我处理过的暂停或停止生命周期中停止释放他们在我的活动课上,每次我打电话给这门课时,我也要求获得 RECORD_AUdio 许可。请帮我解决这个问题,提前谢谢!!

获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本

记录器类:

public class Recorder {

private static String TAG = "Recorder";

//Recorder parameters
private int audiosource = MediaRecorder.Audiosource.DEFAulT;
//Mono=8b,Stereo=16b
privatE int chAnnelConfig = AudioFormat.CHAnnEL_IN_MONO;
//16b or 8b per sample
private int audioEnCoding = AudioFormat.ENCoding_PCM_16BIT;
//number of samples in 1sec
privatE int sampleRate = 44100;//44100;
//Recording thread
private Thread thread;
//CallBACk used to set up filled buffer
private CallBACk callBACk;

public Recorder() {
}

public Recorder(CallBACk callBACk) {
    this.callBACk = callBACk;
}

public voID setCallBACk(CallBACk callBACk) {
    this.callBACk = callBACk;
}

public voID start() {
    if (thread != null) return;
    thread = new Thread(() -> {
        Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUdio);
        //Gets minimum buffer size (can be larger)
        int minBufferSize = AudioRecord.getMinBufferSize(sampleRate,chAnnelConfig,audioEnCoding);
        int optimalBufSize = 12000;
        if (optimalBufSize < minBufferSizE) {
            optimalBufSize = minBufferSize;
        }
        try {
            //Sets the chosen buffer size in analyzing (father) activity
            callBACk.setBufferSize(optimalBufSizE);
            //Create recorder
            AudioRecord recorder = new AudioRecord(audiosource,sampleRate,audioEnCoding,optimalBufSizE);
            if (recorder.getState() == AudioRecord.STATE_UNINITIAliZED) {
                Thread.currentThread().interrupt();
                return;
            } else {
                Log.i(Recorder.class.getSimplename(),"Started.");
            }

            byte[] buffer = new byte[optimalBufSize];
            //Start recording
            recorder.startRecording();
            while (thread != null && !thread.isInterrupted() && (recorder.read(buffer,optimalBufSizE)) > 0) {
                callBACk.onBufferAvailable(buffer);
            }
            recorder.stop();
            recorder.release();
        } catch (Exception E) {
            Log.e("Recorder",e.getmessage());
        }

    },Recorder.class.getname());
    thread.start();
}

public voID stop() {
    if (thread != null) {
        thread.interrupt();
        thread = null;
    }
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本全部内容,希望文章能够帮你解决获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。