Android一次完美的跨进程服务共享实践

  • Android系统底层对录音有限制,同一时间只支持一个进程使用录音的功能

  • 业务需要,一切事务保证主App的录音功能

  • 为了更好的管理录音状态,以及多App相互通信问题

架构图设计

Architecture

App层

包含公司所有需要集成录音服务的端,这里不需要解释

Manager层

该层负责Service层的管理,包括:服务的绑定,解绑,注册回调,开启录音,停止录音,检查录音状态,检查服务运行状态等 ###Service层 核心逻辑层,通过AIDL的实现,来满足跨进程通信,并提供实际的录音功能。

目录一览

看代码目录的分配,并结合架构图,我们来从底层往上层实现一套逻辑

IRecorder 接口定义

public interface IRecorder {

String startRecording(RecorderConfig recorderConfig);

void stopRecording();

RecorderState state();

boolean isRecording();

}

IRecorder 接口实现

class JLMediaRecorder : IRecorder {

private var mMediaRecorder: MediaRecorder? = null

private var mState = RecorderState.IDLE

@Synchronized

override fun startRecording(recorderConfig: RecorderConfig): String {

try {

mMediaRecorder = MediaRecorder()

mMediaRecorder?.setAudioSource(recorderConfig.audioSource)

when (recorderConfig.recorderOutFormat) {

RecorderOutFormat.MPEG_4 -> {

mMediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)

mMediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)

}

RecorderOutFormat.AMR_WB -> {

mMediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB)

mMediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB)

}

else -> {

mMediaRecorder?.reset()

mMediaRecorder?.release()

mMediaRecorder = null

return “MediaRecorder 不支持 AudioFormat.PCM”

}

}

} catch (e: IllegalStateEx

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值