You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:MediaRecorder构造弃用后@RequiresApi注解适配问题咨询

问题解答

为什么带Context的MediaRecorder构造需要@RequiresApi(S)?

虽然MediaRecorder类本身很早就存在,但带Context参数的构造方法是Android 12(API 31,对应代号S)才新增的,低版本Android系统根本没有这个方法,所以Android Studio会要求你添加@RequiresApi(S)注解来标记这段代码只能在API31及以上版本运行。

能不能修改S的值?

绝对不要修改。S是Android SDK版本的固定别名,对应API31,修改后要么编译失败,要么在低版本设备上运行时直接抛出NoSuchMethodError导致崩溃。

兼容低版本的解决方案

正确的做法是做版本判断,在不同系统版本下调用对应的构造方法:

MediaRecorder mediaRecorder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    // API31及以上,使用新增的带Context构造
    mediaRecorder = new MediaRecorder(context);
} else {
    // 低版本继续使用弃用的无参构造
    @SuppressWarnings("deprecation")
    MediaRecorder tempRecorder = new MediaRecorder();
    mediaRecorder = tempRecorder;
}
  • 加@SuppressWarnings("deprecation")是为了消除IDE对弃用方法的警告,不影响功能运行。
  • 这种方式既遵循了新API的要求,又保证了低版本设备的兼容性。

额外说明

Android 12新增带Context的MediaRecorder构造,主要是为了优化媒体权限的处理逻辑,让Recorder和应用上下文绑定,更符合Android的权限规范。旧的无参构造虽然被标记为弃用,但在API31以下的系统中依然可以正常工作,官方不会在短时间内移除它。

内容的提问来源于stack exchange,提问作者dlw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:31:06