Android 使用AudioRecord时出现java.lang.UnsupportedOperationException: Cannot create AudioRecord问题解决方法

本文讲述了在Android开发中遇到'CannotcreateAudioRecord'错误的原因,主要为录音权限未开放,提供了在AndroidManifest.xml添加权限和Android 6.0以上设备手动开启权限的方法.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        文章链接:https://blog.youkuaiyun.com/weixin_42433094/article/details/111631160

 

使用AudioRecord创建对象的时候出现了以下报错:

      java.lang.UnsupportedOperationException: Cannot create AudioRecord

原因:

可能是Android设备录音权限没有开放所导致。

 

解决方法:

1.在AndroidManifest.xml文件中添加以下录音权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />

2. Android6.0以上的Android设备需要手动打开应用录音权限

在设置中的应用管理管理中找到需要录音权限的应用,打开权限

### Java中 `Cannot create AudioTrack` 的解决方案 当遇到 `java.lang.UnsupportedOperationException: Cannot create AudioTrack` 异常,通常意味着应用程序尝试创建 `AudioTrack` 实例失败。这可能是由于多种原因引起的。 #### 权限配置不当 如果应用缺少必要的音频录制权限,则可能会导致无法成功初始化 `AudioTrack` 对象。确保在 AndroidManifest.xml 文件中声明了录音权限[^3]: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO" /> ``` 对于 Android 6.0 (API level 23) 及以上版本的应用程序,在运行还需要动态请求此权限。可以通过以下方式实现: ```java if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.RECORD_AUDIO}, MY_PERMISSIONS_REQUEST_RECORD_AUDIO); } ``` #### 音频参数不兼容 另一个常见原因是所选的音频配置可能与设备硬件不匹配。建议调整采样率、声道数以及缓冲区大小等设置来适应更多类型的设备。例如可以尝试修改为常见的44100Hz单声道格式: ```java int sampleRateInHz = 44100; int channelConfig = AudioFormat.CHANNEL_OUT_MONO; int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 计算最小缓冲区大小 int minBufferSize = AudioTrack.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRateInHz, channelConfig, audioFormat, minBufferSize * 2, AudioTrack.MODE_STREAM); ``` 此外还可以通过命令行工具查看当前系统的音频状态以帮助诊断问题所在[^4]: ```bash adb shell dumpsys media.audio_flinger ``` 上述方法能够有效处理大部分情况下发生的 `Cannot create AudioTrack` 错误。但如果仍然存在相同错误,则需进一步排查其他潜在因素如内存不足等问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值