file.parentFile.mkdirs()
file.createNewFile()
val outputPath: String = file.absolutePath
mMediaRecorder?.setOutputFile(outputPath)
mMediaRecorder?.prepare()
mMediaRecorder?.start()
mState = RecorderState.RECORDING
“”
} catch (e: Exception) {
mMediaRecorder?.reset()
mMediaRecorder?.release()
mMediaRecorder = null
recorderConfig.recorderFile.delete()
e.toString()
}
}
override fun isRecording(): Boolean {
return mState == RecorderState.RECORDING
}
@Synchronized
override fun stopRecording() {
try {
if (mState == RecorderState.RECORDING) {
mMediaRecorder?.stop()
mMediaRecorder?.reset()
mMediaRecorder?.release()
}
} catch (e: java.lang.IllegalStateException) {
e.printStackTrace()
}
mMediaRecorder = null
mState = RecorderState.IDLE
}
override fun state(): RecorderState {
return mState
}
}
这里需要注意的就是加 @Synchronized
因为多进程同时调用的时候会出现状态错乱问题,需要加上才安全。
AIDL 接口定义
interface IRecorderService {
void startRecording(in RecorderConfig recorderConfig);
void stopRecording(in RecorderConfig recorderConfig);
boolean isRecording(in RecorderConfig recorderConfig);
RecorderResult getActiveRecording();
void registerCallback(IRecorderCallBack callBack);
void unregi