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
相关产品推荐
相关产品推荐

