Android 13下自研Kotlin应用能否实现通话录音?
Android 13下通话录音实现方案解析
你的代码问题分析
你提供的MediaRecorder代码片段存在关键缺失,这是生成空白文件的直接原因——缺少输出路径配置、录制准备与启动的核心步骤。补全后的完整代码示例如下:
val mediaRecorder = MediaRecorder(this).apply { setAudioSource(MediaRecorder.AudioSource.MIC) setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP) setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB) // 必须指定输出文件路径 setOutputFile("${externalCacheDir?.absolutePath}/call_recording.3gp") prepare() start() }
但即使补全代码,在Android 13下也只能录制你自己的麦克风声音,无法捕获通话对方的音频——这是Android 10以来的系统限制:普通第三方应用被音频隔离,无法直接获取通话的双向音频流。
应用商店中通话录音应用的实现方式
这些应用能实现完整通话录音,主要依赖以下几种方案:
- 适配厂商私有API:国内主流品牌(小米、华为、OPPO、vivo等)都有未公开的私有通话录音接口,应用通过适配这些接口调用系统原生的通话录音能力,录制文件由系统生成后交付应用处理。这类接口无官方文档,需开发者逆向适配或与厂商合作获取方案。
- 系统级权限与签名:部分应用是系统预装应用,或获取了设备厂商的系统签名,从而获得普通应用无法申请的特殊权限(如
android.permission.RECORD_AUDIO_CALL),这类权限允许直接捕获通话双向音频流。普通开发者无法获取此类权限,需厂商授权系统签名。 - 辅助功能+音频路由调整:通过辅助功能(Accessibility Service)监听通话状态,在通话建立时尝试调整系统音频路由,将对方通话音频导向麦克风输入。这种方式效果不稳定,受系统版本和厂商定制限制较大,部分系统会禁止此类路由修改。
- 屏幕录制捕获内部音频:利用
MediaProjectionAPI申请屏幕录制权限,同时捕获系统内部音频(通话音频属于内部音频)。这种方式会录制设备所有内部声音,需后期剪辑提取通话内容,且需要用户手动授权屏幕录制权限,体验不如专业通话录音方案。
自研应用的可行方向
普通第三方自研应用在Android 13下无法实现完整的双向通话录音,仅能录制己方麦克风声音。若要实现类似商店应用的功能,优先考虑适配主流厂商的私有API,或针对特定定制设备申请系统级权限(仅适用于小众场景)。
内容的提问来源于stack exchange,提问作者Imran Khan Saifi
相关产品推荐
相关产品推荐

