Android 背景录音会自动停止

Android 背景录音会自动停止,android,audio,recording,Android,Audio,Recording,我正在设计一个背景录音代码,如下所示 mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(outputformat); mediaRecorder.setAudioEncoder(audioencod

我正在设计一个背景录音代码,如下所示

            mediaRecorder = new MediaRecorder();
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(outputformat);
            mediaRecorder.setAudioEncoder(audioencoder);
            mediaRecorder.setOutputFile(mRecFile.getAbsolutePath());
            mediaRecorder.prepare();
            mediaRecorder.start();

            Thread.sleep(mDuration);

            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();
此代码位于线程的run()中,当主活动绑定服务时,线程将启动。如果我按“后退”键离开活动(将释放绑定),我发现录制将继续。但是,当我将mDuration设置为一个非常大的num(3600000(1小时))时,录制会在一段时间后停止,
mediaRecorder.stop()永远不会执行

            mediaRecorder = new MediaRecorder();
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(outputformat);
            mediaRecorder.setAudioEncoder(audioencoder);
            mediaRecorder.setOutputFile(mRecFile.getAbsolutePath());
            mediaRecorder.prepare();
            mediaRecorder.start();

            Thread.sleep(mDuration);

            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();

如果我不离开活动。录音总是会正常停止。我想知道的是,为什么我不能长时间录制背景声音?

您应该使用
ForegroundService
在背景中录制音频

            mediaRecorder = new MediaRecorder();
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(outputformat);
            mediaRecorder.setAudioEncoder(audioencoder);
            mediaRecorder.setOutputFile(mRecFile.getAbsolutePath());
            mediaRecorder.prepare();
            mediaRecorder.start();

            Thread.sleep(mDuration);

            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();
前台服务是一种被认为是用户主动意识到的服务,因此在内存不足时不是系统要杀死的候选服务。前台服务必须为状态栏提供通知,该状态栏位于“正在进行”标题下,这意味着除非服务停止或从前台删除,否则无法取消通知

            mediaRecorder = new MediaRecorder();
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(outputformat);
            mediaRecorder.setAudioEncoder(audioencoder);
            mediaRecorder.setOutputFile(mRecFile.getAbsolutePath());
            mediaRecorder.prepare();
            mediaRecorder.start();

            Thread.sleep(mDuration);

            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();
你可以获得更多关于Android前台服务的信息

            mediaRecorder = new MediaRecorder();
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(outputformat);
            mediaRecorder.setAudioEncoder(audioencoder);
            mediaRecorder.setOutputFile(mRecFile.getAbsolutePath());
            mediaRecorder.prepare();
            mediaRecorder.start();

            Thread.sleep(mDuration);

            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();